BufferedOutputStream的学习

时间:2022-10-20 09:40:44

今天写了一下一段代码,结果打开文件却发现要写入文件的内容不仅没写入,原来的内容也消失了,而控制台却显示原文件的内容都被读取出来了,代码如下:

 FileInputStream fileInputStream = new FileInputStream(oldPath);
FileOutputStream fileOutputStream =new FileOutputStream(newPath);
//若要显示,BufferedInputStream的read方法每次从字节流中读取一个字符来
int temp=-1;
BufferedInputStream bi = new BufferedInputStream(fileInputStream);
BufferedOutputStream bo = new BufferedOutputStream(fileOutputStream);
while ((temp=bi.read())!=-1){
System.out.print((char)temp);
bo.write((char)temp);
}

后来查了资料才知道,应该在结尾加上bo.flush().因为BufferedOutputStream是从字节流中一个字符一个字符读取,往缓存区中读写和往硬盘中读写的性能远远不同,若是每读取一个字符都往文件中写那么性能很不好,所以是每读取一个字符再把字符写入缓存区中则减少了大量对硬盘的读写,当使用flush清除缓存才会把缓存区中的字符全部写入文件中。上面的代码中,打开了文件,所以把原来的内容清空了,然后读取的内容存在缓冲区中,由于没有调用flush方法,并未写入文件中,仍留在缓存区中就结束了文件操作。