1. 程式人生 > 其它 >Java-IO流系列-轉換流

Java-IO流系列-轉換流

轉換流

什麼是轉換流

轉換流提供了在位元組流和字元流之間的轉換

Java API提供了兩個轉換流:

  • InputStreamReader: 將InputStream轉換為Reader

  • OutputStreamWriter:將Writer轉換為OutputStream

  • 位元組流中的資料都是字元時,轉成字元流操作更高效。

  • 很多時候我們使用轉換流來處理檔案亂碼問題。實現編碼和解碼的功能

轉換流的使用

輸入流

  1. 轉換流:

    • InputStreamReader:將- -個位元組的輸入流轉換為字徒的輸入流
    • outputstreamwriter:將-一個字元的輸出流轉換為位元組的輸出流
  2. 作用:提供位元組流與字元流之間的轉換

  3. 編碼與解碼

    • 解碼:位元組、位元組陣列--->字元陣列、 字串
    • 編碼:字元陣列、字串--->位元組,位元組陣列
  4. InputStreamReader的引數2指明瞭字符集,具體使用哪個字符集,取決於檔案test.txt儲存時使用的字符集
    InputStreamReader預設是系統的編碼
    
  5. 注意此時仍應該用try-catch塊

package com.dreamcold.io;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Demo12 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("test.txt");
        InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
        char[] cbuf=new char[20];
        int len;
        while ((len=isr.read(cbuf))!=-1){
            String str=new String(cbuf,0,len);
            System.out.println(str);
        }
        isr.close();

    }
}
  1. 結果如下:

綜合使用InputStreamReader和utputstreamWriter

package com.dreamcold.io;


import java.io.*;

public class Demo13 {
    public static void main(String[] args) throws IOException {
        File file1=new File("test.txt");
        File file2=new File("test2-gbk.txt");

        FileInputStream fis=new FileInputStream(file1);
        FileOutputStream fos=new FileOutputStream(file2);

        InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
        OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");

        char[] buf=new char[10];
        int len;
        while ((len=isr.read(buf))!=-1){
            osw.write(buf,0,len);
        }

        isr.close();
        osw.close();
    }
}

效果: