字符流
首先我们再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()方法,将缓存内容释放。
浙公网安备 33010602011771号