使用BufferedOutputStream
时,我认为真正的输出要等到我们使用flush方法才会发生?那么BufferedInputStream
呢?它有flush方法吗?
使用BufferedOutputStream
时,我认为真正的输出要等到我们使用flush方法才会发生?那么BufferedInputStream
呢?它有flush方法吗?
在BufferedOutputStream中,真正的输出要么发生在内部缓冲区满时,要么在刷新时进行。
对于BufferedInputStream,没有刷新,因为这是没有意义的。
它会从底层流中读入大块数据到其内部缓冲区,而这个调用被认为是昂贵的,并且高效地在你请求这些数据时提供少量的数据。一旦你已经读取了一个缓冲区的数据,它自动从底层流中为您读取下一个缓冲区。因此,它的操作对您来说是完全透明的。
没有flush方法。Flush方法只是用于输出。
刷新意味着将缓冲区的完整内容写入磁盘。这只有在你写入磁盘时才有意义,而在从磁盘读取时则没有。
有些人可能会在读取上下文中使用“清除缓冲区”的说法,当他们想要出于某种原因清除缓冲区时。
但是我会称写操作为“刷新”,读操作为“清除”,以避免混淆。
术语和精确的语言在学习基础知识时非常重要。尽量养成这个习惯。它会对你有很大帮助 :)
这个概念是,BufferedInputStream
会要求底层流以相对较大的块为单位提供数据。思想是请求大块数据比多次请求小量数据更有效率。
由于不需要写入任何内容(没有待刷新的数据),因此没有刷新方法可用。
每当需要读取更多数据时,都会从操作系统中进行read()。没有flush()的等效物。
最接近的是在MemoryMappedByteBuffer中,您可以在需要之前触发区域加载。