文章目錄
- OutputStreamWriter和InputStreamReader
OutputStreamWriter和InputStreamReader
在整個IO包中,實際上就是分為位元組流和字元流,但是除了這兩個流之外,還存在了一組位元組流-字元流的轉換類。
OutputStreamWriter:是Writer的子類,將輸出的字元流變為位元組流,即:將一個字元流的輸出對象變成位元組流的輸出對象。
InputStreamReader:是Reader的子類,將輸入的位元組流變為字元流,即:將一個位元組流的輸入對象變成字元流的輸入對象。
一般在操作輸入輸出內容就需要使用位元組或字元流,但是有些時候需要將字元流變成位元組流的形式,或者將位元組流變為字元流的形式,所以,就需要另外一群組轉換流的操作類。
看一下OutputStreamWriter的構造方法:
public OutputStreamWriter(OutputStream out)
例如,將位元組的檔案輸出資料流,以字元的形式輸出
1 import java.io.File;
2 import java.io.FileOutputStream;
3 import java.io.IOException;
4 import java.io.OutputStreamWriter;
5 import java.io.Writer;
6
7 public class Test20 {
8 public static void main(String[] args) throws IOException {
9 File f = new File("d:" + File.separator+"test.txt");
10 Writer out=new OutputStreamWriter(new FileOutputStream(f));
11 out.write("Hello World!!!");
12 out.close();
13 }
14 }
讀得時候也可以用字元流形式讀取位元組流的對象
1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.IOException;
4 import java.io.InputStreamReader;
5 import java.io.Reader;
6
7 public class Test21 {
8 public static void main(String[] args) throws IOException {
9 File f = new File("d:" + File.separator+"test.txt");
10 Reader input=new InputStreamReader(new FileInputStream(f));
11 char[] c=new char[1024];
12 int len=input.read(c);
13 input.close();
14 System.out.println(new String(c,0,len));
15 }
16 }
以上操作只是以檔案操作為例,OutputStreamWriter中接受的類型是OutputStream,只要是位元組輸出資料流都可以以使用字元的形式操作,InputStreamReader一樣。
FileWriter和FileReader的說明
從JDK文檔中可以知道FileOutputStream是OutputStream的直接子類。FileInputStream也是InputStream的直接子類,但是在字元流檔案的兩個操作類卻有一些特殊,FileWriter並不直接是Writer的子類,而是OutputStreamWriter的子類,而FileReader也不直接是Reader的子類,而是InputStreamReader的子類,那麼從這兩個類的繼承關係就可以清楚的發現,不管是使用位元組流還是字元流實際上最終都是以位元組的形式操作輸入輸出資料流的。也就是說,傳輸或者從檔案中讀取資料的時候,檔案裡真正儲存的資料永遠是位元組。