使用BufferedOutputStream
时,我认为在使用flush之前不会发生实际输出? BufferedInputStream
怎么样,有冲洗方法吗?
答案 0 :(得分:3)
BufferedOutputStream中的实际输出在内部缓冲区已满或刷新时发生。
使用BufferedInputStream时没有刷新,因为它没有意义。
它的作用是从底层流中读入大块数据,这被认为是很昂贵的,然后在你请求时有效地为你提供一小部分数据。一旦读取了缓冲区数据,它就会自动从底层流中为您读取下一个缓冲区。所以,它的操作对你来说是完全透明的。
答案 1 :(得分:2)
刷新意味着您将缓冲区的完整内容写入磁盘。这只有在您将写入磁盘时才有意义,但是当您从中读取时却没有。
有些人可能会因为某些原因想要清除缓冲区而在阅读环境中使用“刷新缓冲区”。
但我会将写操作 flush 和读取操作 clear 调用,以避免混淆。
在学习基础知识时,术语和精确的演讲很重要。试着去习惯这个习惯。它会帮助你很多:))
答案 2 :(得分:1)
没有冲洗方法。刷新方法仅用于输出。
答案 3 :(得分:0)
这个想法是BufferedInputStream
在相对较大的块中询问基础流中的数据。我们的想法是,请求大块数据比多次向操作系统查询少量数据更有效。
没有冲洗方法,因为它不需要(没有写入所以没有什么可以冲洗)。
答案 4 :(得分:0)
只要您需要读取更多数据,就会从操作系统中读取()。没有等效的flush()。
最接近的是MemoryMappedByteBuffer,您可以在需要之前触发要加载的区域。
答案 5 :(得分:0)
如果您有选择,请始终使用BufferedInputStream,因为它为您带来了此线程中已列出的优点,并且还实现了.mark() - 和.reset() - 允许您“重用”流的方法(有点)。