天天看点

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

继续阅读