【发布时间】:2018-03-26 23:33:42
【问题描述】:
我的问题在某种程度上类似于这个问题: what's the purpose of BufferedOutputStream? 我已经阅读了那里的答案,但还有一件事我不太明白: 所以在 Java 中,BufferedOutputStream 有一个内部缓冲区。如果此缓冲区已满或调用了 flush(),它会将数据写入底层 OutputStream(传递给 BufferedOutputStream 的构造函数的那个)。 到目前为止还可以。但对我来说,它看起来好像实际上任何 OutputStream 都会有这样的缓冲区——因为基类 OutputStream 有一个方法 flush()。此方法的描述是:“刷新此输出流并强制写出任何缓冲的输出字节。” 所以......如果所有的 OutputStreams 都有一个缓冲区,那么 BufferedOutputStream 有什么好处呢? 可能我误会了……你能帮帮我吗?
您好, 丹尼尔
【问题讨论】:
-
'此方法的描述为:“刷新此输出流并强制写出任何缓冲的输出字节'。继续阅读。您的问题基于错误的假设。
-
不是每个
OutputStream都有一个内部缓冲区,但是当您使用足够大的数组参数调用write时,仍然会有效地拥有一个缓冲区。在这方面,BufferedOutputStream确实已经过时并且被过度使用了。通常情况下,最好修复执行过多小写入的代码,而不是使用BufferedOutputStream来解决问题。对于使用合理缓冲区大小的代码,另外使用BufferedOutputStream甚至会降低性能。
标签: java stream buffer outputstream