掌握OutputStreamWriter和InputStreamReader類的作用
一般操作輸入輸出內容的時候,就需要使用字節或字符流,但是,有些時候,需要將字符流變成字節流形式,或者字節流變成字符流形式。
所以,就需要另一種轉換流的操作類。
OutputStreamWriter:是Writer的子類。將輸出的字符流變成字節流:即將字符流的輸入對象變成字節流輸入對象。
InputStreamReader:是Reader的子類。將輸入的字節流變成字符流,即將一個字節流的輸入對象變成字符流輸入對象。
OutputStreamWriter類的構造方法
OutputStreamWriter(OutputStream out)
創建使用默認字符編碼的 OutputStreamWriter。
從構造方法可以看出,在outputStreamWriter類中需要一個字節流對象。
例如:將字節的文件輸出流,以字符的形式輸出。
package 類集; import java.io.* ; public class OutputStreamWriterDemo01{ public static void main(String args[]) throws Exception { // 所有異常拋出 File f = new File("d:" + File.separator + "test.txt") ; Writer out = null ; // 字符輸出流 out = new OutputStreamWriter(new FileOutputStream(f)) ; // 字節流變為字符流,同時向上轉型。 out.write("hello world!!") ; // 使用字符流輸出 out.close() ; } };
讀的時候,也可以使用字符流的形式讀取字節流文件。
package 類集; import java.io.* ; public class InputStreamReaderDemo01{ public static void main(String args[]) throws Exception{ File f = new File("d:" + File.separator + "test.txt") ; Reader reader = null ; reader = new InputStreamReader(new FileInputStream(f)) ; // 將字節流變為字符流 char c[] = new char[1024] ; int len = reader.read(c) ; // 讀取 reader.close() ; // 關閉 System.out.println(new String(c,0,len)) ; } };
輸出結果:
hello world!!
但是,以上只是文件操作為例,因為outputStreamWriter中接收的類型是OutputStream,只要是字節輸出流都可以使用字符的形式操作。
而InputStreamReader中接收的類型是InputStream。只要是字節輸入流,都可以使用字符的輸入流操作。
FileWriter和FileReader類的說明
java.io
類 FileWriter
java.lang.Object
繼承者 java.io.Writer
繼承者 java.io.OutputStreamWriter
繼承者 java.io.FileWriter
FilWriter不是Writer的子類,而是轉換流的子類。
java.io
類 FileReader
java.lang.Object
繼承者 java.io.Reader
繼承者 java.io.InputStreamReader
繼承者 java.io.FileReader
FileReader也不是Reader的子類,而是轉換流的子類。
也就是說,不管如何,雖然是以字符的輸出流形式,操作字節流輸出流,但是實際上還是以字節的形式輸出。
而字符的輸入流雖然是以字符的形式操作,但是還是使用了字節流,也就是說,在傳輸或者從文件讀取數據的時候,文件里真正保存的數據永遠是字節。
總結
1,一定要掌握兩個轉換類的作用
2,一定要明白的終端點實際上是以字節的形式進行的。
3,FileWriter和FileReader兩個子類的定義,中間使用了轉換類。