java位元組流與字元流的差別
主要差別有:
實際上位元組流在操作時本身不會用到緩沖區(記憶體),是檔案本身直接操作的,而字元流在操作時使用了緩沖區,通過緩沖區再操作檔案,看圖:

下面以兩個寫檔案的操作為主進行比較,但是在操作時位元組流和字元流的操作完成之後都不關閉輸出流。
範例:使用位元組流不關閉執行
public class OutputStreamDemo05 {
public static void main(String[] args) throws Exception { // 異常抛出, 不處理
// 第1步:使用File類找到一個檔案
File f = new File("d:" + File.separator + "test.txt"); // 聲明File 對象
// 第2步:通過子類執行個體化父類對象
OutputStream out = null;
// 準備好一個輸出的對象
out = new FileOutputStream(f);
// 通過對象多态性進行執行個體化
// 第3步:進行寫操作
String str = "Hello World!!!";
// 準備一個字元串
byte b[] = str.getBytes();
// 字元串轉byte數組
out.write(b);
// 将内容輸出
// 第4步:關閉輸出流
// out.close();
// 此時沒有關閉
}
}
運作結果為:Hello World!!!
此時沒有關閉位元組流操作,但是檔案中也依然存在了輸出的内容,證明位元組流是直接操作檔案本身的
範例:使用字元流不關閉執行
public class WriterDemo03 {
public static void main(String[] args) throws Exception { // 異常抛出, 不處理
// 第1步:使用File類找到一個檔案
File f = new File("d:" + File.separator + "test.txt");// 聲明File 對象
// 第2步:通過子類執行個體化父類對象
Writer out = null;
// 準備好一個輸出的對象
out = new FileWriter(f);
// 通過對象多态性進行執行個體化
// 第3步:進行寫操作
String str = "Hello World!!!";
// 準備一個字元串
out.write(str);
// 将内容輸出
// 第4步:關閉輸出流
// out.close();
// 此時沒有關閉
}
}
運作結果:空
程式運作後會發現檔案中沒有任何内容,這是因為字元流操作時使用了緩沖區,而 在關閉字元流時會強制性地将緩沖區中的内容進行輸出,但是如果程式沒有關閉,則緩沖區中的内容是無法輸出的,是以得出結論:字元流使用了緩沖區,而位元組流沒有使用緩沖區。
位元組流在操作檔案時,即使不關閉資源(close方法),檔案也能輸出,但是如果字元流不使用close方法的話,則不會輸出任何内容,說明字元流用的是緩沖區,并且可以使用flush方法強制進行重新整理緩沖區,這時才能在不close的情況下輸出内容
在字元流的操作中,所有的字元都是在記憶體中形成的,在輸出前會将所有的内容暫時儲存在記憶體之中,是以使用了緩沖區暫存資料。如果想在不關閉時也可以将字元流的内容全部輸出,則可以使用Writer類中的flush()方法完成。
範例:強制性清空緩沖區
public class WriterDemo04 {
public static void main(String[] args) throws Exception { // 異常抛出不處理
// 第1步:使用File類找到一個檔案
File f = new File("d:" + File.separator + "test.txt");// 聲明File
對象
// 第2步:通過子類執行個體化父類對象
Writer out = null;
// 準備好一個輸出的對象
out = new FileWriter(f);
// 通過對象多态性進行執行個體化
// 第3步:進行寫操作
String str = "Hello World!!!";
// 準備一個字元串
out.write(str);
// 将内容輸出
out.flush();
// 強制性清空緩沖區中的内容
// 第4步:關閉輸出流
// out.close();
// 此時沒有關閉
}
}
運作結果為:Hello World!!!
此時,檔案中已經存在了内容,更進一步證明内容是儲存在緩沖區的。這一點在讀者日後的開發中要特别引起注意。
提問:使用位元組流好還是字元流好?學習完位元組流和字元流的基本操作後,已經大概地明白了操作流程的各個差別,那麼在開發中是使用位元組流好還是字元流好呢?
回答:使用位元組流更好。在回答之前,先為讀者講解這樣的一個概念,所有的檔案在硬碟或在傳輸時都是以位元組的方式進行的,包括圖檔等都是按位元組的方式存儲的,而字元是隻有在記憶體中才會形成,是以在開發中,位元組流使用較為廣泛。