读取文件注意事项
为什么使用.read()读取文件然后写入中文时不会乱码
FileInputStream 和 BufferedInputStream 读取文件时的区别
相同点
.read()
,每次读取1byte
int temp;
while ((temp = r.read()) != -1) {// 每次读取1byte
System.out.println(temp);
w.write(temp);// 写入文件
//System.out.println("写入成功");
}
- 定义byte数组
byte[] bytes = new byte[20];// 定义每次读取20字节数量
while (r.read(bytes) != -1) {// 判断是否读完
w.write(bytes);// 每次读取到bytes中,然后从bytes中取出写入文件20byte
}
使用数组读写时,最好使用write(byte[] array, int offset, int len),如果直接使用write(byte[])可能会写入错误的数据
byte[] b = new byte[2];
int len = 0;
while ((len = r.read(b)) != -1)
//w.write(b);// 原文件有三个字母abc,写入新文件后是abcb,以为第一次读到ab后,第二次在读时,b会残留在数组的第二个元素中,如果把数组全部写入,就会重复写入上次读入的数据
write(b, 0, len);// 每次读几个数据就写几个数据就不会产生上面的错误
不同点
-
声明方法
BufferedInputStream r = new BufferedInputStream(new FileInputStream("src/file/file02.txt")
FileInputStream r =new FileInputStream("src/file/file02.txt")
-
读取方法
FileInputStream每次都从硬盘读取数据
BufferedInputStream有一个缓冲区,每次从缓冲区读取数据,缓冲区的大小默认为8192字节,在文件小于这个大小的时候Buffer的的读取速度要远大于File直接读取