Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FileOutputstream.close()并不总是将字节写入文件系统?_Java_Android_Filesystems_Java Io - Fatal编程技术网

Java FileOutputstream.close()并不总是将字节写入文件系统?

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()以确

在阅读了@Peter Lawrey,尤其是这句话之后:

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()