標籤:style blog http color java 使用 os io
字元流相關
字元流基本上可以類比位元組流 只不過是將位元組流的byte 換為char。
最根本的兩個類是Reader以及Writer
Reader的子類有:
BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader
Writer的子類有:
BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
特殊的類:
InputStreamReader以及OutputStreamWriter 通過這兩個類可以實現位元組流與字元流之間的轉化,前提是本身讀入的是字串。
將位元組流轉化為字元流
public InputStreamReader(InputStream in)
利用指定的編碼格式cs 將位元組流轉化為字元流
InputStreamReader(InputStream in, Charset cs)
OutputStreamWriter的使用也是類似的方式
例子:
package com.characterStream.bufferWriter;
import java.io.*;
public class streamTest {
public static void main(String[] args) throws Exception {
FileOutputStream fos=new FileOutputStream("F:\\filetest.txt");
//這裡將位元組流轉化為字元流
OutputStreamWriter osw=new OutputStreamWriter(fos);
//這裡是位元組流的過濾流
BufferedWriter bw=new BufferedWriter(osw);
bw.write("the test of BufferedStream");
bw.write(‘\n‘);
bw.write("test is finished");
//用字元流的時候這裡的close就變得更加關鍵了
//只有close的時候 才會將bufferedwriter中的內容寫入到檔案中
//否則的話 檔案中是沒有什麼實際內容的
bw.close();
//再通過字元流從外部讀入
FileReader fr=new FileReader("F:\\filetest.txt");
BufferedReader br=new BufferedReader(fr);
//這個是每次讀入一行資料
String str;
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
//將標準輸入裝置封裝成為位元組流 每次在控制體上輸入的資訊又會再次列印出來
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader bfr=new BufferedReader(isr);
//注意這種輸入資料流的通用的格式 讀到最後一行的話 就會出來一個 null 表示已經//到了最後一行
while((str=bfr.readLine())!=null){
System.out.println(str);
}
bfr.close();
}
}
注意字元流中由於緩衝區的使用,只有在close的時候才會將字元流中的內容讀進來或者讀出去,加上close是非常關鍵的。
關於封裝模式在IO中的應用
之前也看到了具體的IO過濾流的一些典型的寫法 比如:
DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\filetest.txt")));
但是為什麼能這樣寫,就是說為什麼能寫成這麼一種嵌套的模式,這就要涉及到Java的設計模式,這裡面應用到的就是封裝模式具體見:
http://www.cnblogs.com/Goden/p/3901664.html