【发布时间】:2015-12-24 07:54:49
【问题描述】:
我正在阅读有关Buffer Streams 的信息。我搜索了一下,发现很多答案都清楚了我的概念,但还有一点问题。
经过搜索,我了解到,Buffer 是临时内存(RAM),它可以帮助程序快速读取数据而不是硬盘。当 Buffers 为空时,则为原生 input API is called。
在阅读了更多内容后,我得到了答案from here。
从磁盘逐字节读取数据效率非常低。一种方法 加快速度是使用缓冲区:而不是一次读取一个字节, 您一次读取几千个字节,并将它们放入缓冲区中 记忆。然后就可以一个一个的查看缓冲区中的字节了。
我有两个困惑,
1:如何/谁在缓冲区中填充数据? (原生 API 怎么样?)正如上面引用的那样,谁一次填充了数千个字节?它会消耗相同的时间。假设我有 5MB 数据,并且 5MB 在 5 秒内加载到 Buffer 中。然后程序在 5 秒内使用缓冲区中的这些数据。总共10秒。但是如果我跳过缓冲,那么程序在 1MB/2 秒内从硬盘获取直接数据,与总共 10 秒相同。请解开我的困惑。
2:第二条这条线是如何工作的
BufferedReader inputStream = new BufferedReader(new FileReader("xanadu.txt"));
我在想 FileReader 将数据写入缓冲区,然后 BufferedReader 从缓冲存储器中读取数据?也解释一下。
谢谢。
【问题讨论】: