Java中的字節流和字符流區別

字節流

  • 1、字節流在操作的時候不會用到緩衝區(也就是內存)
  • 2、字節流可用於任何類型的對象,包括二進制對象
  • 3、字節流處理單元爲1個字節,操作字節和字節數組。

字符流

  • 1、而字符流在操作的時候會用到緩衝區
  • 2、而字符流只能處理字符或者字符串
  • 3、字符流處理的單元爲2個字節的Unicode字符,操作字符、字符數組或字符串,

在硬盤上的所有文件都是以字節形式存在的(圖片,聲音,視頻),而字符值在內存中才會形成。
所以字符流是由Java虛擬機將字節轉化爲2個字節的Unicode字符爲單位的字符而成的。
在這裏插入圖片描述
下面以兩個寫文件的操作爲主進行比較,但是在操作時字節流和字符流的操作完成之後都不關閉輸出流。

使用字節流不關閉執行

public static void main(String[] args) {
	File file = new File("d:" + File.separator + "test1.txt");
	try {
		OutputStream os = new FileOutputStream(file);
		String str = "hello world";
		byte b[] = str.getBytes();
		os.write(b);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

查看文件內容:
在這裏插入圖片描述
此時沒有關閉字節流操作,但是文件中也依然存在了輸出的內容,證明字節流是直接操作文件本身的


使用字符流不關閉執行

public static void main(String[] args) {
File file = new File("d:" + File.separator + "test2.txt");
	try {
		Writer out = new FileWriter(file);
		String str = "hello world";
		out.write(str);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

查看文件內容:
在這裏插入圖片描述
沒有內容,這是因爲字符流操作時使用了緩衝區,而 在關閉字符流時會強制性地將緩衝區中的內容進行輸出,但是如果程序沒有關閉,則緩衝區中的內容是無法輸出的,所以得出結論:字符流使用了緩衝區,而字節流沒有使用緩衝區。。


使用字符流強制清空緩存區

public static void main(String[] args) {
File file = new File("d:" + File.separator + "test2.txt");
	try {
		Writer out = new FileWriter(file);
		String str = "hello world";
		out.write(str);
		//強制清空緩存區內容
		out.flush();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

此時文件中已被寫入內容,更加說明了字符操作內容是保存在緩衝區的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章