天天看點

為什麼會有OutputStreamWriter和InputStreamReader兩個轉換類的出現以及它們的作用

花了一晚上的時間,看書,看jdk api 總算是把OutputStreamWriter和InputStreamReader兩個轉換類的出現以及它們的作用弄清楚了,在此分享一下,希望對其他學習者有所幫助。

 * 作用:

 * InputStreamReader 的作用是将“位元組輸入流”轉換成“字元輸入流”。它繼承于Reader。 

 * OutputStreamWriter 的作用是将“位元組輸出流”轉換成“字元輸出流”。它繼承于Writer。

 * 

 * 其實比較容易懂的方法去了解這兩個類那就是去看這兩個類的構造函數

 *   InputStreamReader構造函數的參數為 InputStream,是以很好了解 它的作用就是将“位元組輸入流”轉換成“字元輸入流”。

 *   同理可以知道OutputStreamWriter的作用是将“位元組輸出流”轉換成“字元輸出流”。

 * 

 * 

 * 為什麼會有OutputStreamWriter和InputStreamReader兩個轉換類的出現?

 * 1.首先要說一下位元組流和字元流的差別:

 * 1)讀寫機關不同:位元組流以位元組(8bit)為機關,字元流以字元為機關,根據碼表映射字元,一次可能讀多個位元組。

 * 2)處理對象不同:位元組流能處理所有類型的資料(如圖檔、avi等),而字元流隻能處理字元類型的資料。

 * 結論:隻要是處理純文字資料,就優先考慮使用字元流。 除此之外都使用位元組流。

 *  

 *  2.接着說一下計算機的存儲機制:

 *   計算機中任何資料都是二進制儲存的,不管是文本、圖檔還是視訊,是以我們可以采用位元組流對所有資料的操作,

 *   但是有時候我們又想用字元流便捷操作,這個時候我們就要用到轉換流了。

 *  下面舉個例子說明一下:

 *  比方說,我們現在要讀取一張相片的資料,這個時候我們應該選擇用位元組輸入流,這樣我們獲得的資料就是位元組的形式

 *  但是在程式中我們并不想以位元組的形式儲存,是以這個時候我們就需要将其轉換成字元流,進而儲存在字元串數組中。

 *  這裡就用到InputStreamReader類,将“輸入位元組流”轉換成“字元輸入流”。

 *  同理可以了解OutputStreamWriter類的作用。

package io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;


public class OutputStreamWriterAndInputStreamReader {
	
	public static void main(String[] args) throws IOException{	
		OutputStreamWriterDemo();
		InputStreamReaderDemo();	
	}
	/*在這個程式中,我們就是想以字元串的形式将資料寫到文本中,是以就要将“位元組輸出流”轉換成“字元輸出流”*/
	public static void OutputStreamWriterDemo() throws IOException {
		// TODO Auto-generated method stub
		File file = new File("F:"+File.separator+"test.txt");
		
		Writer out = new OutputStreamWriter(new FileOutputStream(file,true));
		
		out.write("\r\n20160229zhoujing");
		out.close();
	}
	/*在這個程式中,我們想将讀取到的文本資料儲存在字元數組中,是以就要将“位元組輸入流”轉換成“字元輸入流”*/
	public static void InputStreamReaderDemo() throws IOException {
		// TODO Auto-generated method stub
		File file = new File("F:"+File.separator+"test.txt");
		
		Reader in = new InputStreamReader(new FileInputStream(file));
		
		char[] c = new char[1024];
		
		int len = in.read(c);
		
		in.close();
		
		System.out.println(new String(c,0,len));	
	}
}