1. 程式人生 > >IO流之轉換流

IO流之轉換流

一  轉換流

1 OutputStreamWriter類

是字元流通向位元組流的橋樑:

可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。它的作用的就是,將字串按照指定的編碼表轉成位元組,在使用位元組流將這些位元組寫出去。

    public static void main(String[] args) throws IOException {
        //指定目的地
        FileOutputStream fos=new FileOutputStream("E:\\java\\UTF-8.txt",true);
        //建立轉換流
        OutputStreamWriter osw=new
OutputStreamWriter(fos, "utf-8"); osw.write("你好,小豬佩奇"); osw.flush(); //釋放資源(你自己new了誰,就關誰,先開的後關) osw.close(); fos.close(); }

2 InputStreamReader類

是位元組流通向字元流的橋樑:

它使用指定的字元編碼表讀取位元組並將其解碼為字元。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺預設的字符集。

    public static void main(String[] args) throws
IOException { //獲取資料來源 FileInputStream fis=new FileInputStream("E:\\java\\UTF-8.txt"); //建立轉換流 InputStreamReader isr=new InputStreamReader(fis,"utf-8"); //開始讀取 int len=0; while((len=isr.read())!=-1){ System.out.println((char)len); }
//釋放資源 isr.close(); fis.close(); }

注意:在讀取指定的編碼的檔案時,一定要指定編碼格式,否則就會發生解碼錯誤,而發生亂碼現象。

3. 轉換流和子類的區別

發現有如下繼承關係:

OutputStreamWriter:

                   |--FileWriter:

InputStreamReader:

                 |--FileReader;

一旦要指定其他編碼時,絕對不能用子類,必須使用字元轉換流。什麼時候用子類呢?

條件:

1、操作的是檔案。2、使用預設編碼。

總結:

位元組--->字元 : 看不懂的--->看的懂的。  需要讀。輸入流。 InputStreamReader

字元--->位元組 : 看的懂的--->看不懂的。  需要寫。輸出流。 OutputStreamWriter