首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >性能: BufferedOutputStream与FileWriter

性能: BufferedOutputStream与FileWriter
EN

Stack Overflow用户
提问于 2013-07-08 22:16:52
回答 2查看 15.4K关注 0票数 8

在Java语言中,我一直使用FileWriter向文件中写入文本。显然,您也可以使用BufferedOutputStream。在仔细阅读了这两个javadoc之后,我似乎不知道哪个was更快/更有效。

因此我问:这两种文件I/O方法之间是否存在性能差异(即使是最小的差异)?如果是,它们是什么?为什么?如果不是,为什么它们实际上是相同的?

是否存在其中一种优先于另一种的场景?提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-08 22:54:03

如果您真的想比较FileWriterBufferedOutputStream来编写文本文件,那么后者应该更快,因为它有更少的I/O操作。

write

  • FileWriter的情况下,每次对方法的调用都将立即持久化(这是flush的情况,如果缓冲区已满(或者使用flush方法显式刷新缓冲区),数据将被写入磁盘。

但是,如果您编写文本文件,则应该使用Writer;在这种情况下,我们可以将FileWriterBufferedWriter进行比较

看着

代码语言:javascript
复制
FileWriter fw = new FileWriter(...)

代码语言:javascript
复制
BufferedWriter bw = new BufferedWriter(new FileWriter(...)

对于I/O操作的数量,您也有相同的情况。

FileWriter在内部使用FileOutputStream。使用FileWriter的原因是,当您写入文件时,它会自动使用默认的字符编码(例如,Java内部字符串被编码为UTF8)。如果您使用OutputStream,则必须在每次写入时手动编码:

所以这个BufferedWriter的例子

代码语言:javascript
复制
bw.write("Hello");

对应于BufferedOutputStream的示例

代码语言:javascript
复制
bos.write("Hello".getBytes(Charset.forName("utf-8")));

如果您的默认编码为utf-8

OutputStream处理(原始)字节,而Writer处理(文本)字符。

票数 10
EN

Stack Overflow用户

发布于 2013-07-08 22:20:35

FileWriter将文本写入文件,而BufferedOutputStream在内存中保存任意二进制数据的缓冲区,然后将其写入您必须提供的另一个二进制流。它们根本不做同样的事情,所以比较它们的性能是没有意义的。

通常,缓冲可以提高应用程序吞吐量,但会增加延迟。对于文件,您可以生成更多每秒的输出,因为您可以一次将更大的块传输到磁盘,因此每个字节的开销更低。另一方面,当数据被缓冲在内存中时,它不会被写入磁盘,因此将任何特定的字节写入磁盘需要更长的时间。

对于FileWriter,它已经有了一个内部缓冲区,可以帮助将字符编码成字节。添加更多的缓冲可能没有什么价值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17528954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档