4

可能重复:
在 Java 中,使用 BufferedWriter 追加到文件有什么好处?

我正在查看的网站说

“BufferWriter 类用于将文本写入字符输出流,缓冲字符,以便高效写入单个字符、数组和字符串。”

是什么让它更有效率,为什么?

4

5 回答 5

5

BufferedWriter效率更高,因为它使用缓冲区而不是逐个字符地写入。所以它减少I/O了磁盘的操作。数据收集在缓冲区中,并在缓冲区已满时写入文件。这就是为什么如果你不调用 flush 方法,有时文件中没有数据写入的原因。也就是说,数据被收集在缓冲区中,但程序在将它们写入文件之前退出。即使缓冲区没有完全填满,调用flush方法也会导致数据写入文件。

于 2011-11-23T08:03:30.467 回答
4

当您将逐个字符写入文件时,写入成本变得昂贵。为了降低成本,提供了缓冲器。如果您正在写入缓冲区,它会等待某个限制,然后将整个写入磁盘。

于 2011-11-23T07:54:11.593 回答
3

BufferedWriter 一直等到缓冲区(8192 字节)已满,并在一次磁盘操作中写入整个缓冲区。每次写入未缓冲会导致磁盘 I/O 显然更昂贵。

于 2011-11-23T07:51:37.930 回答
0

顾名思义,BufferedWriter 使用缓冲区来降低写入成本。如果您正在写入文件,您可能知道写入 1 字节或写入 4 字节的成本大致相同。执行此类写入所需的时间由访问时间(~8ms)支配,这是磁盘旋转和寻找正确扇区所需的时间。

此外,将小写入聚合到更大的写入中可以减少操作系统的开销,从而获得更好的性能。

大多数操作系统确实有一个内部缓冲区来缓存写入。然而,这些缓存试图通过分析写入模式来弄清楚应用程序在做什么。如果应用程序本身能够执行缓存,并且仅在数据准备好时执行写入,则结果(就性能而言)会更好。

于 2011-11-23T07:50:16.773 回答
0

硬盘具有最小的信息存储单元,例如,如果您正在写入单个字节,则操作系统会要求磁盘存储一个存储单元(我认为最小值为 512 字节)。因此,您要求写入一个字节,而操作系统会写入更多。如果您要求使用 512 个调用存储 512 个字节,那么您最终会执行更多的 I/O(512 个磁盘操作),而不是缓冲 512 个字节并仅发出一个调用(1 个磁盘操作)。

于 2011-11-23T07:56:10.067 回答