Java FileOutputstream.close()并不总是将字节写入文件系统?
在阅读了@Peter Lawrey,尤其是这句话之后:Java FileOutputstream.close()并不总是将字节写入文件系统?,java,android,filesystems,java-io,Java,Android,Filesystems,Java Io,在阅读了@Peter Lawrey,尤其是这句话之后: close() (重点是我的。) 我有3个问题: 调用close()后,磁盘上的所有字节都可用,这是真的吗?(我想这是真的,因为它来自@Peter Lawrey) 一般来说(即在所有操作系统上都有效),确保所有字节有效写入磁盘的最佳方法是什么?(我可以想象计算写入流的字节数,然后等待file.length()==byteCount…但是有更好的方法吗?) 特别是,在Android上,调用fileOutputStream.close()以确
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 ?
你应该做你想做的。参见萨加尔·皮尔克哈尔(Sagar Pilkwhal)建议的(他为什么删除他的答案?)1、2、3答案是:使用flush()代码>在<代码>关闭()之前代码>据我所知:flush()在文件输出流中做任何事情我已经编辑了我的答案,添加了更多的文档链接。“你同步,你赢”。
fileOutputstream.getFD().sync()