在Java中,使用BufferedWriter或直接写入文件有什么区别?

时间:2011-11-23 07:48:11

标签: java file-io bufferedwriter

  

可能重复:
  In Java, what is the advantage of using BufferedWriter to append to a file?

我正在查看的网站

  

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

什么使它更有效率,为什么?

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

BufferedWriter等待缓冲区(8192字节)已满并将整个缓冲区写入一个磁盘操作。无缓冲的每次写入都会导致磁盘I / O显然更加昂贵。

答案 3 :(得分:0)

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

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

大多数操作系统都有内部缓冲区来缓存写入。但是,这些缓存通过分析写入模式试图弄清楚应用程序正在做什么。如果应用程序本身能够执行该缓存,并且仅在数据准备就绪时执行写入,则结果(在性能方面)更好。

答案 4 :(得分:0)

硬盘有一个最小的信息存储单元,例如,如果你写一个字节,操作系统会要求磁盘存储一个存储单元(我认为最小值是512字节)。所以你要求写一个字节,操作系统写得更多。如果要求存储512个字节和512个调用,则最终会执行更多I / O(512个磁盘操作),缓冲512个字节并仅发出一个调用(1个磁盘操作)。