我正在通过DataOutputStream(RandomAccessFile-> FileOutputStream-> BufferedOutputStream-> DataOutputStream)将信息写入文件。
我假设如果填充了用于数据输出的缓冲区,那么dataoutput流会自动刷新吗?
我问的原因是我在for循环中写入数据,并在循环之后刷新(我猜测在循环的每次迭代之后刷新会破坏使用缓冲区的点),并且当数据太大(4MB atm)我的文件输出不正确。
答案 0 :(得分:3)
DataOutputStream
没有缓冲区,因此无需刷新。一切都是在write()/writeXXX()
方法中编写的。但是BufferedOutputStream
当然有一个缓冲区,所以你当然需要刷新或关闭才能将数据写入文件。您需要关闭最外面的流,即在这种情况下是DataOutputStream
,而不是任何嵌套流。
当数据太大(4MB atm)时,我的文件没有出来 正确。
您必须发布您的代码。 BufferedOutputStream
的缓冲区默认为8k字节,与4Mb无关。