日期:2014-05-20  浏览次数:20940 次

FileOutputStream的刷新问题
代码如下:
     File file=new File("D:\\1.txt");
byte[] bs="需要刷新吗".getBytes();
     FileOutputStream fileOut=new FileOutputStream(file,true);

fileOut.write(bs);
                                // fileOut.flush();

本人多次测试,发现无论有没有fileOut.flush()都可以写入文件,实在是想不明白这个类的flush()方法用途是什么
请高手赐教!

------解决方案--------------------
flush的作用是用于在数据缓存中数据满了之后刷新该缓存,然后对剩下的数据继续进行缓存。如果要写入的数据量很小,或者你自己定义的缓存足够大到可以保存所有数据的话,不用flush也不会丢失数据,但是如果要写入的数据大小操作缓存大小,则需要循环多步才能处理完,这时不用flush就会导致只有最前面的一些数据能够写入,而剩下的数据会丢失。所以你这里之所以没问题,纯粹是因为你的内容太短了,写一个图片试试。
------解决方案--------------------
flush方法是用来清除缓存的,不是我们理解刷新,就好比又初始化了一个对象一样
------解决方案--------------------
引用:
引用:flush的作用是用于在数据缓存中数据满了之后刷新该缓存,然后对剩下的数据继续进行缓存。如果要写入的数据量很小,或者你自己定义的缓存足够大到可以保存所有数据的话,不用flush也不会丢失数据,但是如果要写入的数据大小操作缓存大小,则需要循环多步才能处理完,这时不用flush就会导致只有最前面的一些数据能够写入,而剩下……
数据缓存不是输出流的属性变量,是你自己定义的一个字节数组。输入流把数据写入这个字节数组,输出流再把字节数组里的数据写出去,输入流输出流本身并不拥有这个字节数组,也就是数据缓存。
------解决方案--------------------
FILEOUTSTRESM是不需要flush的,只有BUFFERED的才需要FLUSH
------解决方案--------------------
FileOutputStream 继承 OutputStream 并不提供flush方法的重写 
所以无论内容多少write都会将二进制流直接传递给底层操作系统 flush无效果。

缓冲部分字节并刷新的效果请参见BufferedOutputStream的flush实现

good luck!