可能重复:
In Java, what is the advantage of using BufferedWriter to append to a file?
我正在查看的网站
“BufferWriter类用于将文本写入字符输出流,缓冲字符,以便有效地写入单个字符,数组和字符串。”
什么使它更有效率,为什么?
答案 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个磁盘操作)。