在阅读@Peter Lawrey的this answer之后,尤其是这句话:
close()
可以确保文件实际写入磁盘(或不依赖于操作系统)
(重点是我的。)
我有3个问题:
是否确保在调用close()
后磁盘上的所有字节都不可用? (我想这是真的,因为它来自@Peter Lawrey)
一般情况下(即在所有操作系统上都有效),确保所有字节都有效写入磁盘的最佳方法是什么? (我可以想象计算写入流的字节数,等到 file.length() == byteCount
......但是有更好的方法吗?)
特别是在 Android 上,是否足以调用fileOutputStream.close()
以确保所有字节都有效地写入文件系统?
这是一些代码(忽略异常,......以保持简单)来说明我的帖子
final InputStream instream = getInputStreamFromSomewhere();
final FileOutputStream outputstream = new FileOutputStream(someExistingFile);
int l;
final byte[] tmp = new byte[1024];
while ((l = instream.read(tmp)) != -1) {
outstream.write(tmp, 0, l);
}
instream.close();
//outputStream.flush(); //useless call since outputStream.flush() do nothing on FileOutputStream
outputStream.close();
//at this point : are all bytes written to disk ?
答案 0 :(得分:5)
fileOutputstream.getFD().sync()
应该做你想做的事。见http://docs.oracle.com/javase/7/docs/api/java/io/FileDescriptor.html#sync()