OutputStream
是一个抽象类,包含flush()
方法,根据javadoc不执行任何操作。我知道flush()方法用于推出保留在内部缓冲区中的任何内容。我知道我需要使用flush(),如果我想确保我写入可能保存在内部缓冲区中的流的所有内容都被发送出来。
关键是可能。我如何知道从API接收的流是否正在进行内部缓冲?如果api的javadoc未明确提及内部缓冲是否正在发生并因此建议使用flush(),该怎么办?如果我正在使用返回OutputStream
的API并且我将字节写入此并且我想确保它们被发送,那么基于“以防万一它调用flush()似乎是浪费实际上确实有一个内部缓冲区“。
答案 0 :(得分:4)
如何确定我的OutputStream内部缓冲
一般来说,没有可靠的方法来做到这一点。周期。
如果您知道先验可以在代码库中使用的所有可能的流类,那么在某些情况下你可以告诉;例如基于笨重的instanceof
测试。但即使这样也很脆弱。
...在非缓冲流上调用
flush()
似乎是浪费。
好消息是,在未缓冲的流上调用flush
将非常便宜......甚至是免费的。
例如,OutputStream::flush()
是一个空方法。任何未明确覆盖它的输出流类(例如FileOutputStream
)都将类似地具有flush
的无操作实现。如果JIT编译器能够内联调用no-op flush
方法,那么它将完全被优化。