阿里Java學習路線:階段 1:Java語言基礎-Java語言高階特性:第16章:位元組流與字元流:課時77:位元組流與字元流的區別

Kenny C 發表於 2020-10-16

位元組流與字元流的區別

現在通過一系列的分析已經可以清楚位元組流與字元流的基本操作了,但是對於這兩類依然是存在有區別的,重點來分析一下輸出的處理操作。在使用OutputStream和Writer輸出的最後發現都使用了close()方法進行了關閉處理。
在使用OutputStream類輸出的時候如果現在沒有使用close()方法關閉輸出流發現內容依然可以實現正常輸出,但是如果在使用Writer的時候沒有使用close()方法關閉輸出流,那麼這個時候內容將無法進行輸出,因為Writer使用到了緩衝區,當使用了close()方法的時候實際上會出現有強制重新整理緩衝區的情況,所以這個時候會將內容進行輸出,如果沒有關閉,那麼將無法進行輸出操作,所以此時如果在不關閉的情況下要想將全部的內容輸出可以使用flush()方法強制清空。
範例:使用Writer並強制性清空

package cn.mldn.demo;

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
    	File file = new File("D:" + File.separator + "hello" + File.separator + "mldn.txt") ;
    	if(file.getParentFile().exists()) {
    		file.getParentFile().mkdirs(); // 父目錄必須存在
    	}
    	Writer out = new FileWriter(file);
    	String str = "www.mldn.cn\r\n";
    	out.write(str);
    	out.flush(); // 強制性重新整理
    }
}

位元組流在進行處理的時候並不會使用到緩衝區,而字元流會使用到緩衝區。另外使用緩衝區的字元流更加適合於進行中文資料的處理,所以在日後的程式開發之中,如果要涉及到包含有中文資訊的輸出一般都會使用字元流處理,但是從咖外一方面來講,位元組流和字元流的基本處理形式是相似的,由於IO很多情況下都是進行資料的傳輸使用(二進位制)所以本次的講解將以位元組流為主。