字符流

首先我们再IDEA的工程中创建一个2.txt文件,在文件中写入"我们从未知道那天所见花的名字"。

我们使用相对路径创建File对象,代码如下:

        FileInputStream fis = new FileInputStream("2.txt");

        //定义长度为10的byte数组
        byte[] bytes = new byte[10];

        int len = 0;
        while (true){
            len = fis.read(bytes);
            if (len == -1) {
                break;
            }
            System.out.println(new String(bytes,0,len));
        }
        fis.close();

运行结果如下:

我们从�
��知道�
�天所见
的花的�
��字

我们从结果中可以看到,中文乱码的情况。因为utf-8编码的1个汉字占2-3个字节,而定义的byte数组只能读取10个字节,读取到了不完整的汉字。

有两种解决方法:

  • 第一种是扩大缓冲区,也就是byte数组的容量,一次性读取完即可,占用大量空间,不灵活,不推荐使用。
  • 第二种是使用字符流读取,它会读取一个字符中完整的字节,而不会出现只读取一部分的情况。

字符流概述

如果想要在程序中读取文字,使用字符流更方便。同字节流一样,字符流也有两个抽象的顶级父类,分别是Reader和Writer。

Reader和Writer常用子类的继承关系图


flush刷新管道

字符流中常用void flush()方法,将缓存内容释放。

posted on 2021-10-19 09:23  技术小伙伴  阅读(93)  评论(0)    收藏  举报