java的IO之轉換流

1.轉換流:把字節流轉成字符流

   InputStreamReader:把字節輸入流轉成字符輸入流.
   OutputStreamWriter:把字節輸出流轉成字符輸出流.
---------------------------------------------------------
爲什麼有字節轉字符流,沒有字符轉字節流.
     字節流可以操作一切文件(純文本文件/二進制文件).

     字符流是用來操作中文純文本使用的,本身是對字節流的增強.

InputStreamReader 是字節流通向字符流的橋樑:它使用指定的 charset 讀取字節並將其解碼爲字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺默認的字符集。

每次調用 InputStreamReader 中的一個 read() 方法都會導致從底層輸入流讀取一個或多個字節。要啓用從字節到字符的有效轉換,可以提前從底層流讀取更多的字節,使其超過滿足當前讀取操作所需的字節。

爲了達到最高效率,可要考慮在 BufferedReader 內包裝 InputStreamReader。例如:

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));


OutputStreamWriter 是字節流通向字符流的橋樑:它使用指定的 charset 讀取字節並將其解碼爲字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺默認的字符集。

每次調用 write() 方法都會導致在給定字符(或字符集)上調用編碼轉換器。在寫入底層輸出流之前,得到的這些字節將在緩衝區中累積。可以指定此緩衝區的大小,不過,默認的緩衝區對多數用途來說已足夠大。注意,傳遞給 write() 方法的字符沒有緩衝。

爲了獲得最高效率,可考慮將 OutputStreamWriter 包裝到 BufferedWriter 中,以避免頻繁調用轉換器。例如:

 Writer out = new BufferedWriter(new OutputStreamWriter(System.out));

文件拷貝例子:這裏傳入的是字節流,然後我們把字節流使用上面的轉換流包裝裝換爲字符流,然後再用緩衝流再包裝,這樣讀寫最高效了:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class IODemo6 {
	public static void main(String[] args) {
		//這裏我使用了JDK1.7新特性:自動關閉資源,將資源的創建放到try語句的()中,資源使用完畢之後會自動關閉,不用我們手動釋放
		try 
		(	
				//創建源
				BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt")));
				//創建目標
				BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("fileCopy.txt")));
		)
		{
			//裝換再加上使用緩衝流包裝,接下來的操作就是字符流的操作了
			String  len = null;
			while ((len=reader.readLine())!=null) {
				writer.write(len);
				writer.newLine();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


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