1. 程式人生 > >Java IO操作——位元組-字元轉換流(OutputStreamWriter、InputStreamReader)

Java IO操作——位元組-字元轉換流(OutputStreamWriter、InputStreamReader)

學習目標

 掌握OutputStreamWriter和InputStreamReader類的作用 具體學習內容: OutputStreamWriter和InputStreamReader 在整個IO包中,實際上就是分為位元組流和字元流,但是除了這兩個流之外,還存在了一組位元組流-字元流的轉換類。 OutputStreamWriter:是Writer的子類,將輸出的字元流變為位元組流,即:將一個字元流的輸出物件變為位元組流的輸出物件。 InputStreamReader:是Reader的子類,將輸入的位元組流變為字元流,即:將一個位元組流的輸入物件變為字元流的輸入物件。 一般在操作輸入輸出內容的時候就需要使用位元組或字元流,但是有些時候需要將字元流變為位元組流的形式,或者將位元組流變為字元流的形式,所以,就需要另外一組轉換流的操作類。
轉換步驟: 如果以檔案操作為例,則在記憶體中的字元資料需要通過OutputStreamWriter變為位元組流才能儲存在檔案之中,讀取的時候需要將讀入的位元組流通過InputStreamReader變為字元流
在OutputStreamWriter類中需要一個位元組流的物件:public OutputStreamWriter(OutputStream out) 例如:將位元組的檔案輸出流,以字元的形式輸出。程式碼如下:
import java.io.* ;
public class OutputStreamWriterDemo01{
	public static void main(String args[]) throws Exception	{	// 所有異常丟擲
		File f = new File("d:" + File.separator + "test.txt") ;	
		Writer out = null ;	// 字元輸出流
		out = new OutputStreamWriter(new FileOutputStream(f)) ;	// 位元組流變為字元流
		out.write("hello world!!") ;	// 使用字元流輸出
		out.close() ;
	}
};
讀的時候,也可以使用字元流的形式讀取位元組流的檔案。程式程式碼如下:
import java.io.* ;
public class InputStreamReaderDemo01{
	public static void main(String args[]) throws Exception{
		File f = new File("d:" + File.separator + "test.txt") ;	
		Reader reader = null ;
		reader = new InputStreamReader(new FileInputStream(f)) ;	// 將位元組流變為字元流
		char c[] = new char[1024] ;
		int len = reader.read(c) ;	// 讀取
		reader.close() ;	// 關閉
		System.out.println(new String(c,0,len)) ;
	}
};
但是以上都是以檔案操作為例,因為OutputStreamWriter()中的接收型別是OutputStream,只要是位元組輸出流都可以使用字元的形式操作,而InputStreamReader()中接收的是InputStream,只要是位元組的輸出流都可以使用字元的輸入流操作。 FileWriter和FileReader的說明 從JDK文件中可以知道FileOutputStream是OutputStream的直接子類,FileInputStream也是InputStream的直接子類,但是在字元流檔案的兩個操作類卻有一些特殊,FileWriter並不直接是Writer的子類,而是OutputStreamWriter的子類,而FileReader也不直接是Reader的子類,而是InputStreamReader的子類,那麼從這兩個類的繼承關係就可以清楚的發現,不管是是使用位元組流還是字元流實際上最終都是以位元組形式操作輸出流的。
FileWriter不是Writer的子類,而是轉換流的子類。
FileReader也不是Reader的子類,而是轉換流的子類。 也就是說,最後不管如何,雖然是以字元的輸出流形式操作了位元組的輸出流,但實際上還是以位元組的形式輸出,而字元的輸入流,雖然以字元的形式操作,但實際上還是使用的位元組流,也就是說,傳輸或者是從檔案中讀取資料的時候,檔案中真正儲存的資料永遠是位元組。 總結: 1、一定要掌握兩個轉換類的作用。 2、重點:操作的終端點實際上都是以位元組的形式進行的。 3、FileWriter和FileReader兩個子類的定義,其實是中間使用了轉換類。