Java IO: Reader And Writer
Java IO的Reader和Writer除了基於字元之外,其他方面都與InputStream和OutputStream非常類似。他們被用於讀寫文字。InputStream和OutputStream是基於位元組的,還記得嗎?
Reader
Reader類是Java IO中所有Reader的基類。子類包括BufferedReader,PushbackReader,InputStreamReader,StringReader和其他Reader。
這是一個簡單的Java IO Reader的例子:
Reader reader
=
new
FileReader
(
"c:\\data\\myfile.txt"
)
;
int data
= reader
.
read
(
)
;
while
(data
!=
-
1
)
{
char dataChar
=
(char
) data
;
data
= reader
.
read
(
)
;
}
請注意,InputStream的read()方法返回一個位元組,意味著這個返回值的範圍在0到255之間(當達到流末尾時,返回-1),Reader的read()方法返回一個字元,意味著這個返回值的範圍在0到65535之間(當達到流末尾時,同樣返回-1)。這並不意味著Reade只會從資料來源中一次讀取2個位元組,Reader會根據文字的編碼,一次讀取一個或者多個位元組。
你通常會使用Reader的子類,而不會直接使用Reader。Reader的子類包括InputStreamReader,CharArrayReader,FileReader等等。可以檢視Java IO概述瀏覽完整的Reader表格。
整合Reader與InputStream
一個Reader可以和一個InputStream相結合。如果你有一個InputStream輸入流,並且想從其中讀取字元,可以把這個InputStream包裝到InputStreamReader中。把InputStream傳遞到InputStreamReader的建構函式中:
Reader reader = new InputStreamReader(inputStream);
在建構函式中可以指定解碼方式。更多內容請參閱InputStreamReader。
Writer
Writer類是Java IO中所有Writer的基類。子類包括BufferedWriter和PrintWriter等等。這是一個Java IO Writer的例子:
//java學習交流:737251827 進入可領取學習資源及對十年開發經驗大佬提問,免費解答!
Writer writer
=
new
FileWriter
(
"c:\\data\\file-output.txt"
)
;
writer
.
write
(
"Hello World Writer"
)
;
writer
.
close
(
)
;
同樣,你最好使用Writer的子類,不需要直接使用Writer,因為子類的實現更加明確,更能表現你的意圖。常用子類包括OutputStreamWriter,CharArrayWriter,FileWriter等。Writer的write(int c)方法,會將傳入引數的低16位寫入到Writer中,忽略高16位的資料。
整合Writer和OutputStream
與Reader和InputStream類似,一個Writer可以和一個OutputStream相結合。把OutputStream包裝到OutputStreamWriter中,所有寫入到OutputStreamWriter的字元都將會傳遞給OutputStream。這是一個OutputStreamWriter的例子:
Writer writer = new OutputStreamWriter(outputStream);
整合Reader和Writer
和位元組流一樣,Reader和Writer可以相互結合實現更多更有趣的IO,工作原理和把Reader與InputStream或者Writer與OutputStream相結合類似。舉個例子,可以通過將Reader包裝到BufferedReader、Writer包裝到BufferedWriter中實現緩衝。以下是例子:
view sourceprint?
Reader reader
=
new
BufferedReader
(
new
FileReader
(
...
)
)
;
Writer writer
=
new
BufferedWriter
(
new
FileWriter
(
...
)
)
;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2844427/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java IO: Reader和WriterJava
- IO流中的Reader讀操作
- JAVA IO流對檔案內容的修改(以BufferedReader&Writer為例)Java
- io.Reader遊標引發的血案
- DataX二次開發詳解-Kingbasees86Reader、Kingbasees86Writer外掛
- 如何在 Go 中將 []byte 轉換為 io.Reader?Go
- [java IO流]之 IO概述Java
- java -IO流Java
- Java IO流Java
- Java IO: 流Java
- Java IO: InputStreamJava
- Java IO: OutputStreamJava
- Java IO流Java
- java - IO流Java
- Java 非阻塞 IO 和非同步 IOJava非同步
- Java IO 和 NIOJava
- Java IO實踐Java
- Java的IO流Java
- [Java基礎]IOJava
- Java IO之NIOJava
- Java IO: 網路Java
- 備戰-Java IOJava
- Asyncdb(二):Java IO 初探Java
- Java:IO:深入理解Java
- java同步非阻塞IOJava
- 《Scalable IO in Java》譯文Java
- Java筆記-IO流Java筆記
- Java 檔案 IO 操作Java
- JAVA IO流-小白版Java
- 面試題-JAVA IO面試題Java
- 5⃣️ Java IO 技術Java
- 【重學Java】IO流Java
- Java——IO總結2Java
- Java IO流(詳細)Java
- Medical Image Reader
- JAVA阻塞IO(BIO)簡介Java
- Java IO: 其他字元流(下)Java字元
- java進階(33)--IO流Java