它们之间有什么区别?我刚刚开始学习Java ATM,但似乎我可以通过两种方式写入文件,即(我没有在这里复制try-catch块)。
FileWriter file = new FileWriter("foo.txt");
file.write("foobar");
file.close();
和
FileWriter file = new FileWriter("foo.txt");
BufferedWriter bf = new BufferedWriter(file);
bf.write("foobar");
bf.close();
我理解首先缓冲数据的概念,那么这是否意味着第一个示例将字符逐个写入,第二个示例将其缓冲到内存中并写入一次?
发布于 2012-09-10 19:01:54
你是正确的。下面是BufferedWriter
的write()
方法:
public void write(int c) throws IOException {
synchronized (lock) {
ensureOpen();
if (nextChar >= nChars)
flushBuffer();
cb[nextChar++] = (char) c;
}
}
正如您所看到的,它确实会检查缓冲区是否已满(if (nextChar >= nChars)
)并刷新缓冲区。然后将新字符添加到缓冲区(cb[nextChar++] = (char) c;
)。
发布于 2012-09-10 19:00:19
BufferedWriter更高效。如果我的内存没记错的话,它会把小的写操作和更大的写操作保存起来。如果你正在做很多小的写操作,那么我会使用BufferedWriter。调用对操作系统的写调用很慢,因此通常需要尽可能少的写操作。
发布于 2018-05-12 01:53:04
在无缓冲输入/输出(FileWriter、FileReader)中,读或写请求由底层操作系统直接处理。https://hajsoftutorial.com/java/wp-content/uploads/2018/04/Unbuffered.gif
这会使程序的效率大大降低,因为每个这样的请求通常都会触发磁盘访问、网络活动或一些其他相对昂贵的操作。为了减少这种开销,Java平台实现了缓冲I/O流。BufferedReader和BufferedWriter类提供内部字符缓冲区。写入缓冲编写器的文本存储在内部缓冲区中,只有在缓冲区填满或刷新时才写入底层编写器。https://hajsoftutorial.com/java/wp-content/uploads/2018/04/bufferedoutput.gif
https://stackoverflow.com/questions/12350248
复制相似问题