天天看點

InputStream、InputStreamReader、BufferedReader用法差別

今天回顧總結了一下,Java IO裡面的

InputStream、InputStreamReader、BufferedReader用法差別

  1. 位元組流

    InputStream

    是位元組輸入流的所有類的超類,一般我們使用它的子類,如FileInputStream等

    OutputStream

    是位元組輸出流的所有類的超類,一般我們使用它的子類,如FileOutputStream等
  2. 字元流

    Reader

    是字元輸入流的所有類的超類,

    Writer

    是字元輸出流的所有類的超類

    InputStreamReader

    OutputStreamWriter

    是子類,是位元組流通向字元流的橋梁,它将位元組流轉換為字元流

    還有一個類

    FileReader

    繼承自

    InputStreamReader

    ,可以通過傳入一個

    檔案名

    快速建構字元流
  3. 緩沖流

    BufferedReader

    由Reader類擴充而來,提供通用的緩沖方式文本讀取,readLine讀取一個文本行,

    從字元輸入流中讀取文本,緩沖各個字元,進而提供字元、數組和行的高效讀取

    BufferedWriter

    由Writer 類擴充而來,提供通用的緩沖方式文本寫入, newLine使用平台自己的行分隔符,

    将文本寫入字元輸出流,緩沖各個字元,進而提供單個字元、數組和字元串的高效寫入

自己寫的執行個體操作代碼

  1. 位元組流讀取
@Test
    public void inputStreamTest() throws IOException {
        FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\feifei\\test.txt");
        // 位元組流讀取
        byte[] bytes = new byte[1024];
        int len;
        // 讀取檔案内容到bytes數組中,一次讀取可以容納1024個位元組
        while ((len = fileInputStream.read(bytes)) != -1) {
            // 從0開始截取位元組數組的len長度的位元組
            System.out.println(new String(bytes, 0, len, "UTF-8"));
        }
        fileInputStream.close();
    }
           
  1. 字元流讀取
@Test
    public void inputStreamReadTest() throws IOException {
        FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\Alibaba\\test.txt");
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
        int len;
        // 字元流讀取檔案内容,預設一個字元一個字元的讀
        while ((len = inputStreamReader.read()) != -1) {
            // 從0開始截取位元組數組的len長度的位元組
            System.out.println((char) len);
        }
        fileInputStream.close();
        inputStreamReader.close();
    }
           

也可以多個多個字元讀取,跟位元組流類似,定義一個char數組

  1. 自帶緩沖區的字元流,按行讀取
@Test
    public void bufferedReadTest() throws IOException {
        FileInputStream fileInputStream = new FileInputStream("F:\\idea-Java\\Alibaba\\test.txt");
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String len;
        // 字元緩沖流流讀取檔案内容,通常使用的是一行一行的讀
        while ((len = bufferedReader.readLine()) != null) {
            // 從0開始截取位元組數組的len長度的位元組
            System.out.println(len);
        }
        fileInputStream.close();
        inputStreamReader.close();
        bufferedReader.close();
    }
           

繼續閱讀