任何人都可以解释BufferedInputStream的原理吗?

时间:2012-01-12 13:38:42

标签: java

使用BufferedOutputStream时,我认为在使用flush之前不会发生实际输出? BufferedInputStream怎么样,有冲洗方法吗?

6 个答案:

答案 0 :(得分:3)

BufferedOutputStream中的实际输出在内部缓冲区已满或刷新时发生。

使用BufferedInputStream时没有刷新,因为它没有意义。

它的作用是从底层流中读入大块数据,这被认为是很昂贵的,然后在你请求时有效地为你提供一小部分数据。一旦读取了缓冲区数据,它就会自动从底层流中为您读取下一个缓冲区。所以,它的操作对你来说是完全透明的。

答案 1 :(得分:2)

刷新意味着您将缓冲区的完整内容写入磁盘。这只有在您将写入磁盘时才有意义,但是当您从中读取时却没有。

有些人可能会因为某些原因想要清除缓冲区而在阅读环境中使用“刷新缓冲区”。

但我会将写操作 flush 和读取操作 clear 调用,以避免混淆。

在学习基础知识时,术语和精确的演讲很重要。试着去习惯这个习惯。它会帮助你很多:))

答案 2 :(得分:1)

没有冲洗方法。刷新方法仅用于输出。

答案 3 :(得分:0)

这个想法是BufferedInputStream在相对较大的块中询问基础流中的数据。我们的想法是,请求大块数据比多次向操作系统查询少量数据更有效。

没有冲洗方法,因为它不需要(没有写入所以没有什么可以冲洗)。

答案 4 :(得分:0)

只要您需要读取更多数据,就会从操作系统中读取()。没有等效的flush()。

最接近的是MemoryMappedByteBuffer,您可以在需要之前触发要加载的区域。

答案 5 :(得分:0)

如果您有选择,请始终使用BufferedInputStream,因为它为您带来了此线程中已列出的优点,并且还实现了.mark() - 和.reset() - 允许您“重用”流的方法(有点)。