本人用DataOutputStream 写数据到一个文件共541170字节,然后用DataInputStream按照写文件的顺序读文件,无误。
DataOutputStream, DataInputStream的构造方法分别如下
DataOutputStream writerEx = new DataOutputStream(new FileOutputStream(strFileName));DataInputStream reader = new DataInputStream(new BufferedInputStream(
new FileInputStream(strFileName)));但是由于写文件速度较慢,改用如下的DataOutputStream 构造方法,DataInputStream 构造方法无变化:DataOutputStream writerEx = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(strFileName)));在相同的写文件方法下却只写入了540672字节,求教这是什么原因?最好能从BufferedOutputStream的原理上帮我解释一下,用了BufferedOutputStream之后写文件的速度确实快了,但是这算是数据丢失吧。我写的数据有int,short和char...

解决方案 »

  1.   

    似乎看到BufferedOutputStream这一次性是写2048b还是512b,只要未写满就一直在buffer里面存着么?
      

  2.   

    Buffered类最后需要一个清空缓冲区的命令来完成缓冲区操作,因为Buffered类是每满一定数量的缓冲区(512K或者你自己设定的缓冲区大小),才进行写操作,而最后一次操作时,缓冲区内虽然也写入了数据,但是没有写满,所以没有引发输出操作,这部分在缓冲区的数据如果没有进行清空缓冲区的操作,自然就丢失了。