首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java IO (javase 6)-帮助我理解使用Streams和Writer示例的效果

Java IO (javase 6)-帮助我理解使用Streams和Writer示例的效果
EN

Stack Overflow用户
提问于 2010-02-11 17:27:36
回答 2查看 250关注 0票数 1
代码语言:javascript
复制
BufferedWriter out = new BufferedWriter( new OutputStreamWriter( new BufferedOutputStream( new FileOutputStream("out.txt") ) ) );

因此,让我看看我是否理解了这一点:为文件"out.txt“打开了一个字节输出流。然后将其馈送到缓冲输出流,以使文件操作更快。缓冲流被馈送到输出流写入器以从字节桥接到字符。最后,这个写入器被提供给一个缓冲的写入器...这又增加了一层缓冲?

嗯..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-11 17:37:41

是的,你是对的。

我认为在这种情况下,你可以做得更短(参见BufferedWriter)

代码语言:javascript
复制
BufferedWriter out = new BufferedWriter(new FileWriter("foo.out"));

或者,如果您想要更好的打印功能:

PrintWriter out =新的PrintWriter(新的BufferedWriter(新的FileWriter(“foo.out”);

FileWriter可能会创建自己的包装,但该类将知道哪种方式是最好的。

在java中,Streams和Writer是包装器,因此您可以根据自己的需要对它们进行组装(通过像您一样堆叠它们)。这些类不看它们堆叠在哪种类型的流/写入器上。在你的例子中,有几个缓冲区意味着你实际上有两个缓冲区,在两个不同的类中。这意味着它们将占用一些额外的内存,可能还会造成一些性能损失,但您很可能永远不会注意到这一点(因为与其他性能因素相比,这只是一个很小的开销)。

票数 3
EN

Stack Overflow用户

发布于 2010-04-12 11:42:23

这是decorator pattern的一个示例。其思想是在不修改类的情况下向类添加功能。在您的示例中,您有一个FileWriter。你希望你写的任何东西在写之前都先被缓冲(如果它是通过网络的话这是个好主意)。因此,您可以在FileWriter之上使用BufferedWriter。其他应用程序可能不希望数据被缓冲,因此开发人员不需要添加BufferedWriter。

我们不能预测所有开发人员都需要什么。假设您需要编写数据,现在不需要修改FileWriter,而是创建一个名为Rot13Writer的类来实现rot13。Rot13Writer将获取一个写入器实例,并在将其传递给下一个写入器之前执行rot13。

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

https://stackoverflow.com/questions/2243441

复制
相关文章

相似问题

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