2012-01-12 75 views
2

当使用BufferedOutputStream时,我认为直到我们使用flush才会发生真正的输出? BufferedInputStream怎么样,有冲洗的方法吗?任何人都可以解释BufferedInputStream的原理吗?

+2

来吧伙计们,让他有些松懈。当我开始编程时,我无法理解客户端和服务器之间的区别。这个问题并没有那么糟糕。 – Raku 2012-01-12 13:47:36

回答

1

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

0

这个想法是,BufferedInputStream以相对较大的块向底层流询问数据。这种想法是,请求大块数据比向操作系统少量数据请求更有效。

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

3

Flushing意味着您将缓冲区的完整内容写入磁盘。这只有在你编写的磁盘时才有意义,但是当你正在从读取时。

有些人可能会在阅读上下文中使用“刷新缓冲区”,当他们想要明确缓冲区出于某种原因。

但我会致电写入操作冲洗和读取操作清除,以避免混淆。

在学习基础知识时,术语和准确的讲话很重要。尝试获得这种习惯。它会帮助你很多:)

0

每当你需要读取更多的数据时,有一个从操作系统的read()。没有相同的flush()。

MemoryMappedByteBuffer中最接近的位置,您可以在其中触发需要加载的区域。

3

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

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

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

0

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

相关问题