gpt4 book ai didi

java - 缓冲流在 Java 内部是如何工作的

转载 作者:行者123 更新时间:2023-12-01 11:07:27 25 4
gpt4 key购买 nike

我正在阅读有关 Buffer Streams 的内容。我搜索了一下,找到了很多答案,这些答案澄清了我的概念,但仍然有更多问题。

经过搜索,我了解到,Buffer是临时内存(RAM),它可以帮助程序快速读取数据,而不是硬盘。当缓冲区为空时,将调用 native 输入 API

阅读更多内容后,我得到了答案 from here也就是说。

Reading data from disk byte-by-byte is very inefficient. One way to speed it up is to use a buffer: instead of reading one byte at a time, you read a few thousand bytes at once, and put them in a buffer, in memory. Then you can look at the bytes in the buffer one by one.

我有两个困惑,

1:数据如何/由谁填充到缓冲区? (原生 API 如何?)如上面引用的,谁一次填充了数千个字节?并且会消耗相同的时间。假设我有 5MB 数据,并且 5MB 在 Buffer 中加载一次需要 5 秒。然后程序在 5 秒内使用缓冲区中的数据。总共 10 秒。但如果我跳过缓冲,则程序以 1MB/2 秒的速度从硬盘获取直接数据,总计 10 秒。请澄清我的这个困惑。

2:第二个该行如何工作

BufferedReader inputStream = new BufferedReader(new FileReader("xanadu.txt"));

我在想 FileReader 将数据写入缓冲区,然后 BufferedReader 从缓冲区内存读取数据?还解释一下这一点。

谢谢。

最佳答案

至于在读/写期间使用缓冲的性能,它的影响可能很小,因为操作系统也会缓存,但是缓冲会减少对操作系统的调用次数,这会产生影响。

当您在顶部添加其他操作(例如字符编码/解码或压缩/解压缩)时,影响会更大,因为这些操作在 block 中完成时效率更高。

<小时/>

你的第二个问题说:

As I'm thinking FileReader write data to buffer, then BufferedReader read data from buffer memory? Also explain this.

我相信你的想法是错误的。是的,从技术上讲,FileReader 会将数据写入a缓冲区,但该缓冲区不是由 FileReader 定义的,而是由 FileReader.read(buffer) 方法的调用者定义的.

当某些代码调用 BufferedReader.read()(任何重载)时,该操作从外部启动。然后 BufferedReader 将检查其缓冲区,如果缓冲区中有足够的数据,它将返回数据,不涉及 FileReader。如果需要更多数据,BufferedReader 将调用 FileReader.read(buffer) 方法来获取下一个数据 block 。

这是一个拉操作,而不是推送,这意味着数据是由调用者从读取器中拉出的。

关于java - 缓冲流在 Java 内部是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com