字節:一種計量單位,表示數據量的多少。(Byte)
字符:數字,字母,漢字和各種符號。(String(字符串)、char(字符))
區別:字節流沒有使用到緩衝區,而字符流使用了; 處理各種數據都可以通過字節流完成,而在處理中文的時候使用字符流會更好。
轉換流:通過InputStreamReader(字節輸入流轉換爲字符輸入流) 、 OutputStreamWriter(字節輸出流轉換爲字符輸出流)兩個類來實現。
它們的繼承關係如下:
java.lang.Object
| - java.io.Writer
| - java.io.OutputStreamWriter
| - java.io.FileWriter
java.lang.Object
| - java.io.Reader
| - java.io.InputStreamReader
| - java.io.FileReader
由上可以發現,所有要讀取的文件數據都是字節數據,所有的字符都是在內存中處理後形成的。
OutputStreamWriter類的構造方法:
OutputStreamWriter(OutputStream out)
解釋:OutputStreamWriter類的構造方法接收OutputStream類的對象,且OutputStreamWriter是Writer的子類,該類對象可以直接向上轉型爲Writer類對象,這樣就可以將接收到的字節輸出流轉換爲字符輸出流。
同理,InputStreamReader也是一樣。
實現輸出流轉換:
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class TestOutputStreamWriter {
public static void main(String args[]) throws Exception{
File file = new File("D:" + File.separator + "demo.txt" + "demo.txt");
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs(); //創建父路徑
}
OutputStream output = new FileOutputStream(file); //字節流
//將OutputStream類對象傳遞給OutputStreamWriter類的構造方法,向上轉型爲Writer
Writer out = new OutputStreamWriter(output);
out.write("今天星期五,上山打老虎");
out.flush();
out.close();
}
}