gpt4 book ai didi

java - Double BufferedWriter 或 BufferedReader 的优点

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:08 24 4
gpt4 key购买 nike

我知道 BufferedWriterBufferedReader 不能直接与文件通信。 它需要包装另一个 Writer 反对这样做。喜欢,

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("abc.txt"));

这里我们只是使用 BufferedWriter 包装一个 FileWriter 对象以获得 IO 性能优势。

但我也可以这样做,

BufferedWriter bufferedWriter = new BufferedWriter(new BufferedWriter(new FileWriter("abc.txt")));

这里 FileWrite 对象使用 BufferedWriter 包装,而 BufferedWriter 又使用另一个 BufferedWriter 包装。或者更邪恶的想法是将它链接得更远。

double BufferedWriter有什么真正的优势吗?或者进一步链接它?这同样适用于 BufferedReader。

最佳答案

没有任何好处,没有。

首先,您必须了解缓冲的用途。当您写入磁盘时,硬盘驱动器需要物理地将磁头移动到正确的位置,然后等待磁盘旋转到正确的位置,然后然后开始写入字节作为磁盘在头下旋转。相对而言,前两个步骤比其余操作要慢得多。这意味着有很多固定的开销:写入 1000 个字节比写入 1 个字节 1000 次要快得多。

因此,缓冲只是一种让应用程序以一种易于应用程序逻辑的方式写入字节的方式——一次一个字节,三个字节,1000 字节,等等——同时仍然获得磁盘性能。大多数对缓冲区的写操作实际上不会导致任何字节进入底层输出流;只有当您达到某个限制(例如,每 1000 个字节)时,所有内容才会一次性写入。

在输入方面也是一样的。

因此,将这些链接起来没有帮助。使用链,假设它们具有相同的缓冲区大小,您将写入“外部”缓冲区,而它根本不会写入“内部”缓冲区......然后当它达到其限制时,它会刷新所有这些字节到内部缓冲区。该内部缓冲区立即达到其缓冲区限制(因为它们是相同的限制)并将这些字节刷新到输出。您没有任何好处,但您确实必须在内存中额外复制字节(到字节缓冲区)。

关于java - Double BufferedWriter 或 BufferedReader 的优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32167819/

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