繁体   English   中英

Java中BufferedOutputStream的好处是什么? 每个OutputStream都没有缓冲区吗?

[英]What is the benefit of a BufferedOutputStream in java? Doesn't every OutputStream have a buffer?

我的问题在某种程度上类似于此: BufferedOutputStream的目的是什么? 我已经阅读了那里的答案,但是还有一件事我不太了解:所以在Java中,BufferedOutputStream有一个内部缓冲区。 而且,如果此缓冲区已满或调用了flush(),它将把数据写入底层的OutputStream(已传递给BufferedOutputStream的构造函数的数据)。 到目前为止,还可以。 但对我来说,似乎实际上任何OutputStream都具有这样的缓冲区-因为基类OutputStream具有方法flush()。 该方法的描述说:“刷新此输出流并强制写出所有缓冲的输出字节。” 那么...如果所有OutputStreams都有一个缓冲区,那么BufferedOutputStream的好处是什么? 可能是我误会了某件事...您能帮我吗?

丹尼尔,问候

基类OutputStream是抽象的。 这意味着它定义了接口以及所有输出流的一些常见行为。 您不能实例化OutputStream实例。

该文档明确指出

OutputStream的flush方法不执行任何操作。

由具体实现决定是否使用缓冲区。

OutputStream没有缓冲区,可以检查源代码。 BufferedOutputStream有自己的缓冲区,其flush()将字节从自己的缓冲区写入OS,然后刷新OS缓冲区。 为什么使用BufferedOutputStream效率更高-因为OutputStream.write可能每次都会调用OS,这是昂贵的操作,并且BufferedOutputStream.write会将字节放入缓冲区,并且仅在缓冲区已满或刷新时才调用OS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM