所以我正在为即将到来的java考试学习,在学习指南中,一个简短的回答问题涉及何时使用缓冲区以及何时不使用缓冲区。我对这个主题进行了非常全面的搜索,没有具体的内容,所以我想我会问自己和其他可能有类似问题的人一样。
从我收集的内容来看,通常首选使用缓冲区,因为它比逐字节读取磁盘(这是在没有缓冲区的情况下从磁盘读取文件的方式)的资源要少。现在,我的问题是,什么时候 NOT 首选在java中处理文件时使用缓冲区?我最好的猜测是,如果文件非常小,使得缓冲区的需求有些多余,但我对此并不完全确定。
另外,快速了解实际缓冲的内容会很棒(另一个简答题)。我已经读过它只是内存中的一个空间,读/写的数据存储在大块中,就像直接在磁盘上一样。这是正确的描述吗?也许太暧昧了?这里的澄清也很棒。谢谢:))
答案 0 :(得分:4)
缓冲发生在一种类型的介质(即RAM,速度快但尺寸有限)和其他类型(硬盘驱动器,它很大,但是,因为所有东西都有两面,慢一点))
对于硬盘驱动器控制器,写单个字节或千字节没有多大区别。因此,不是每次写入1024次写入,而是执行1024字节大小的单次写入要快得多。
我认为当你需要尽可能快地保存数据时,使用缓冲区可能效率低下(甚至是至关重要的),而无需等待填充缓冲区,例如编写某种日志(我知道其中的情况)调试Linux内核恐慌是一个问题,因为日志没有完全写入文件,因此开发人员无法看到发生了什么,因为缓冲问题。)
缓冲区占用空间。通常缓冲是优选的选择。您唯一需要决定的是缓冲区大小。即使是非缓冲过程也可以被认为是大小为1的缓冲区(或者我应该说是零?)
您可以将缓冲视为一种概念/模式来连接不同速度的媒体。您可以在缓冲区中收集数据并立即将其放入慢速介质中。由于这是一个缓慢的操作,你可以花这个时间来收集下一堆数据。理想情况下,缓冲区的大小与您要归档的带宽一致。与非缓冲的阻塞操作相比,这种异步数据交换可以显着提高传输速度。
希望它可以为这个主题增添一些亮点。
已添加:如果没有对维基百科的引用,此帖子就会不一致。在这里:Data Buffer