在Java语言中,我一直使用FileWriter向文件中写入文本。显然,您也可以使用BufferedOutputStream。在仔细阅读了这两个javadoc之后,我似乎不知道哪个was更快/更有效。
因此我问:这两种文件I/O方法之间是否存在性能差异(即使是最小的差异)?如果是,它们是什么?为什么?如果不是,为什么它们实际上是相同的?
是否存在其中一种优先于另一种的场景?提前感谢!
发布于 2013-07-08 22:54:03
如果您真的想比较FileWriter和BufferedOutputStream来编写文本文件,那么后者应该更快,因为它有更少的I/O操作。
write
FileWriter的情况下,每次对方法的调用都将立即持久化(这是flush的情况,如果缓冲区已满(或者使用flush方法显式刷新缓冲区),数据将被写入磁盘。但是,如果您编写文本文件,则应该使用Writer;在这种情况下,我们可以将FileWriter与BufferedWriter进行比较
看着
FileWriter fw = new FileWriter(...)和
BufferedWriter bw = new BufferedWriter(new FileWriter(...)对于I/O操作的数量,您也有相同的情况。
FileWriter在内部使用FileOutputStream。使用FileWriter的原因是,当您写入文件时,它会自动使用默认的字符编码(例如,Java内部字符串被编码为UTF8)。如果您使用OutputStream,则必须在每次写入时手动编码:
所以这个BufferedWriter的例子
bw.write("Hello");对应于BufferedOutputStream的示例
bos.write("Hello".getBytes(Charset.forName("utf-8")));如果您的默认编码为utf-8。
OutputStream处理(原始)字节,而Writer处理(文本)字符。
发布于 2013-07-08 22:20:35
FileWriter将文本写入文件,而BufferedOutputStream在内存中保存任意二进制数据的缓冲区,然后将其写入您必须提供的另一个二进制流。它们根本不做同样的事情,所以比较它们的性能是没有意义的。
通常,缓冲可以提高应用程序吞吐量,但会增加延迟。对于文件,您可以生成更多每秒的输出,因为您可以一次将更大的块传输到磁盘,因此每个字节的开销更低。另一方面,当数据被缓冲在内存中时,它不会被写入磁盘,因此将任何特定的字节写入磁盘需要更长的时间。
对于FileWriter,它已经有了一个内部缓冲区,可以帮助将字符编码成字节。添加更多的缓冲可能没有什么价值。
https://stackoverflow.com/questions/17528954
复制相似问题