它们之间有什么区别?我刚刚学习 Java ATM,但似乎我可以两种方式写入文件(我没有在这里复制 try-catch 块。)
FileWriter file = new FileWriter("foo.txt");
file.write("foobar");
file.close();
and
FileWriter file = new FileWriter("foo.txt");
BufferedWriter bf = new BufferedWriter(file);
bf.write("foobar");
bf.close();
我理解首先缓冲数据的概念,那么这是否意味着第一个示例将字符逐个写入,第二个示例将其缓冲到内存并写入一次?
BufferedWriter 会更高效,如果你
- 在刷新/关闭之间有多次写入
- 与缓冲区大小相比,写入量很小。
在您的示例中,您只有一次写入,因此 BufferedWriter 只是增加了您不需要的开销。
这是否意味着第一个示例逐个写入字符,第二个示例将其缓冲到内存并写入一次
在这两种情况下,都会立即写入字符串。
如果您只使用 FileWriter 您的 write(String) 调用
public void write(String str, int off, int len)
// some code
str.getChars(off, (off + len), cbuf, 0);
write(cbuf, 0, len);
}
每次调用 write(String) 都会进行一次系统调用。
BufferedWriter 提高效率的地方在于多次小写入。
for(int i = 0; i < 100; i++) {
writer.write("foorbar");
writer.write(NEW_LINE);
}
writer.close();
如果没有 BufferedWriter,这可能会进行 200 (2 * 100) 次系统调用并写入磁盘,这是低效的。使用 BufferedWriter,这些都可以一起缓冲,并且由于默认缓冲区大小为 8192 个字符,因此只需 1 个系统调用即可写入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)