Java IO: Reader And Writer

杜老師說 2022-01-07 10:24:57 阅读数:539

java io reader writer

原文鏈接 作者: Jakob Jenkov  譯者: 李璟([email protected])

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的例子:

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中實現緩沖。以下是例子:

Reader reader = new BufferedReader(new FileReader(...));Writer writer = new BufferedWriter(new FileWriter(...));

原創文章,轉載請注明: 轉載自並發編程網 – ifeve.com本文鏈接地址: Java IO: Reader And Writer

FavoriteLoading添加本文到我的收藏
版权声明:本文为[杜老師說]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071024573753.html