了解在java中何时使用缓冲区处理文件以及何时不使用缓冲区

了解在java中何时使用缓冲区处理文件以及何时不使用缓冲区,java,file-io,Java,File Io,因此,我正在为即将到来的java考试而学习,在学习指南中,有一个简短的回答问题涉及何时使用缓冲区以及何时不使用缓冲区。我对这个话题做了一个相当全面的搜索,没有找到任何具体的答案,所以我想我会为自己和其他可能有类似问题的人的利益而问 从我收集的资料来看,使用缓冲区通常是首选的,因为它比从磁盘逐字节读取(这是在没有缓冲区的情况下从磁盘读取文件的方式)的资源成本更低。现在,我的问题是,在java中处理文件时,何时不是首选使用缓冲区?我最好的猜测是,如果文件非常小,使得缓冲区的需求有些冗余,但我不能完全

因此,我正在为即将到来的java考试而学习,在学习指南中,有一个简短的回答问题涉及何时使用缓冲区以及何时不使用缓冲区。我对这个话题做了一个相当全面的搜索,没有找到任何具体的答案,所以我想我会为自己和其他可能有类似问题的人的利益而问

从我收集的资料来看,使用缓冲区通常是首选的,因为它比从磁盘逐字节读取(这是在没有缓冲区的情况下从磁盘读取文件的方式)的资源成本更低。现在,我的问题是,在java中处理文件时,何时不是首选使用缓冲区?我最好的猜测是,如果文件非常小,使得缓冲区的需求有些冗余,但我不能完全确定这一点


此外,快速概述缓冲实际上是什么也不错(另一个简短的回答问题)。我读到过,它只是内存中的一个空间,在这个空间中,正在读/写的数据以大块的形式存储,就像直接存储在磁盘上一样。这是正确的描述吗?也许太模棱两可了?这里的澄清也会很棒。谢谢:)

缓冲发生在一种介质(即RAM,速度快,但大小有限)和另一种介质(硬盘驱动器,虽然很大,但由于所有介质都有两面,所以速度慢))

对于硬盘驱动器控制器来说,写入一个字节或一个千字节没有多大区别。因此,与每次写入1024个字节不同,每次写入1024个字节的速度要快得多

我认为,当您需要尽可能快地持久保存数据时,使用缓冲区可能是低效的(甚至是至关重要的),而不需要等待缓冲区填充,例如写入某种日志(我知道有些情况下调试Linux内核会出现问题,因为日志没有完全写入文件,所以开发人员无法看到发生了什么,因为缓冲问题)

此外,缓冲区占用空间。通常,缓冲是首选选项。您唯一需要决定的是缓冲区大小。即使是非缓冲进程也可以被视为大小为1(或者我应该说为零)的缓冲区

您可以将缓冲视为连接不同速度的媒体的一种概念/模式。您可以在缓冲区中收集数据,然后立即将其放入慢速媒体。由于这是一种慢速操作,您可以将此时间用于收集下一批数据。理想情况下,缓冲区的大小应与您想要存档的带宽一致。这样的异步与非缓冲、阻塞操作相比,数据交换可显著提高传输速度

希望它能给这个问题增加一些启发


补充:如果没有维基百科的参考,这篇文章将是不一致的。下面是:

优秀、简洁的回答,并提供了一个引导示例!谢谢。概括一下,当需要尽可能快地持久写入数据时,不使用缓冲区可能是有益的。我觉得我考试中的问题有点愚蠢nestly,但它就在那里,所以尽管如此,我觉得讨论是有道理的。“当你需要尽可能快地持续保存日期时”-经过一番思考,我很确定这是主要原因。+1是的,我认为是这样。因为,正如我们所知,所有事情都有两面性))-缓冲区概念的优势在于通过在一个包裹中收集数据来加速传输。这就是它的缺点——你需要时间来收集数据。因此,这种模式不应该应用于不能随时间交换速度的情况。或者,当你不需要速度,也不想浪费时间在速度上,或者说在RAM中的空间)浮夸地说,在这种情况下,我们可以遵守我们的宇宙正在建立的一个基本规则-时间如何转换为数据传输速度,反之亦然)嗯,也许我错了,我们可以从一些东西中获得时间,至少在这一技术层面上),您可以了解有关缓冲区类和缓冲区概念的内容。在这个问题上已经讨论过了。在输入量始终远小于输出量的情况下,缓冲区是不必要的。这是我能想到的唯一合乎逻辑的原因。在阅读之后,我发现虽然它们看起来非常相似,但有可能它们更希望您选择文件缓存。这个问题似乎有点宽泛;虽然我很想看到人们的答案,但我同意这个问题相当广泛,可能会有许多不同类型的答案。除了这是我考试中的一个问题之外,我认为这可能会涉及到一个关于缓冲文件使用的不同主题。不过谢谢你的意见,我很感谢你对这个话题的所有意见!