JAVA-IO操作,字節-字符轉換流


掌握OutputStreamWriter和InputStreamReader類的作用

一般操作輸入輸出內容的時候,就需要使用字節或字符流,但是,有些時候,需要將字符流變成字節流形式,或者字節流變成字符流形式。

所以,就需要另一種轉換流的操作類。

OutputStreamWriter:是Writer的子類。將輸出的字符流變成字節流:即將字符流的輸入對象變成字節流輸入對象。

InputStreamReader:是Reader的子類。將輸入的字節流變成字符流,即將一個字節流的輸入對象變成字符流輸入對象。

OutputStreamWriter類的構造方法

OutputStreamWriter(OutputStream out) 
          創建使用默認字符編碼的 OutputStreamWriter。

從構造方法可以看出,在outputStreamWriter類中需要一個字節流對象。

例如:將字節的文件輸出流,以字符的形式輸出。

package 類集;
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() ;
    }
};

讀的時候,也可以使用字符流的形式讀取字節流文件。

package 類集;
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)) ;
    }
};

輸出結果:

hello world!!

但是,以上只是文件操作為例,因為outputStreamWriter中接收的類型是OutputStream,只要是字節輸出流都可以使用字符的形式操作。

而InputStreamReader中接收的類型是InputStream。只要是字節輸入流,都可以使用字符的輸入流操作

 

FileWriter和FileReader類的說明

java.io 
類 FileWriter
java.lang.Object
  繼承者 java.io.Writer
      繼承者 java.io.OutputStreamWriter
          繼承者 java.io.FileWriter

FilWriter不是Writer的子類,而是轉換流的子類。

 

java.io 
類 FileReader
java.lang.Object
  繼承者 java.io.Reader
      繼承者 java.io.InputStreamReader
          繼承者 java.io.FileReader

FileReader也不是Reader的子類,而是轉換流的子類。

也就是說,不管如何,雖然是以字符的輸出流形式,操作字節流輸出流,但是實際上還是以字節的形式輸出。

而字符的輸入流雖然是以字符的形式操作,但是還是使用了字節流,也就是說,在傳輸或者從文件讀取數據的時候,文件里真正保存的數據永遠是字節。 

 

總結

1,一定要掌握兩個轉換類的作用

2,一定要明白的終端點實際上是以字節的形式進行的。

3,FileWriter和FileReader兩個子類的定義,中間使用了轉換類。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM