首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataOutputStream() VS DataOutputStream(新的BufferedOutputStream())

DataOutputStream() VS DataOutputStream(新的BufferedOutputStream())
EN

Stack Overflow用户
提问于 2011-11-13 13:14:54
回答 4查看 10.9K关注 0票数 12

Java Tutorials中的代码显示了使用DataOutputStream类和DataInputStream类的示例。

代码片段如下所示:

代码语言:javascript
复制
//..
out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));
//..
in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));
//..

我想知道为什么当我们创建一个新的BufferedOutputStream时需要创建一个新的DataOutputStream

这不是多余的,因为这个替代方案也可以工作吗?:new DataOutputStream(new FileOutputStream(dataFile));

正如this page声称的那样,DataStreams已经提供了一个缓冲的文件输出字节流。那么“双缓冲”真的是必需的吗?

我修改了两行代码(输出和输入),去掉了BufferedOutputStreamBufferedInputStream,一切似乎都很好,所以我想知道BufferedOutputStreamBufferedInputStream的用途是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-13 13:16:31

将FileOutputStream包装在BufferedOutputStream中通常会加快程序的整体输出速度。只有在写入大量数据时,才会注意到这一点。同样的事情也适用于在BufferedInputStream中包装InputStream。缓冲区的使用只会影响效率,而不会影响正确性。

票数 10
EN

Stack Overflow用户

发布于 2011-11-13 13:17:17

这不是多余的,只是不同而已。Buffered变种增加了一个缓冲层,通过批量读取和写入来加速IO操作。

它不是每次读/写都去磁盘,而是先去内存。它能产生多大的差异取决于各种因素。OS和/或磁盘I/O系统也可能做一些缓冲。

票数 4
EN

Stack Overflow用户

发布于 2011-11-13 13:24:58

我曾经认为Java IO模型不必要地大,但现在我真的“明白了”,我发现它相当优雅。BufferedOutputStream是装饰者模式的实现(google it...它是有用的)。这意味着BufferedOutputStream只是将功能添加到它包装的输出流中。在内部,BufferedOutputStream调用它所修饰的任何OutputStream。

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

https://stackoverflow.com/questions/8109762

复制
相关文章

相似问题

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