我知道一般的想法,但我不确定它是否有影响,因为Android api声明如下:“刷新此流。此方法的实现应确保写出任何缓冲的数据。此实现什么都不做。“
这个实现没有做任何事情< - 这是否意味着它没用或者我错过了什么?
答案 0 :(得分:5)
如果您阅读oracle上的扩展文档
http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStream.html#flush()
刷新此输出流并强制写出任何缓冲的输出字节。 flush的一般合同是调用它表示,如果先前写入的任何字节已被输出流的实现缓冲,则应立即将这些字节写入其预期目的地。
OutputStream的flush方法不执行任何操作。
意味着,方法本身什么也不做,而且它是抽象的,所以任何底层的类都可以实现自己的刷新流版本并强制它们写入(不在写入队列中等待)
但无论如何,正如 Guillaume 指出的那样,无论如何都要调用它是一种很好的做法。如果稍后,您将流替换为使用它的另一个实现,那么您会后悔。
取决于操作系统,flush()只会强制将数据写入操作系统。
和
flush()在FileOutputStream上什么都不做。它仅对缓冲流有用。
来自close()
的javadoc,请注意,如果您在之后立即关闭流,则不必刷新流。
相关关闭水流,先冲洗它。关闭流后,进一步的write()或flush()调用将导致抛出IOException。但是,关闭先前关闭的流无效。
:
FileOutputStream.close is really slow when writing large file
flush in java.io.FileWriter