BufferedWriter out = new BufferedWriter( new OutputStreamWriter( new BufferedOutputStream( new FileOutputStream("out.txt") ) ) );因此,让我看看我是否理解了这一点:为文件"out.txt“打开了一个字节输出流。然后将其馈送到缓冲输出流,以使文件操作更快。缓冲流被馈送到输出流写入器以从字节桥接到字符。最后,这个写入器被提供给一个缓冲的写入器...这又增加了一层缓冲?
嗯..。
发布于 2010-02-11 17:37:41
是的,你是对的。
我认为在这种情况下,你可以做得更短(参见BufferedWriter)
BufferedWriter out = new BufferedWriter(new FileWriter("foo.out"));或者,如果您想要更好的打印功能:
PrintWriter out =新的PrintWriter(新的BufferedWriter(新的FileWriter(“foo.out”);
FileWriter可能会创建自己的包装,但该类将知道哪种方式是最好的。
在java中,Streams和Writer是包装器,因此您可以根据自己的需要对它们进行组装(通过像您一样堆叠它们)。这些类不看它们堆叠在哪种类型的流/写入器上。在你的例子中,有几个缓冲区意味着你实际上有两个缓冲区,在两个不同的类中。这意味着它们将占用一些额外的内存,可能还会造成一些性能损失,但您很可能永远不会注意到这一点(因为与其他性能因素相比,这只是一个很小的开销)。
发布于 2010-04-12 11:42:23
这是decorator pattern的一个示例。其思想是在不修改类的情况下向类添加功能。在您的示例中,您有一个FileWriter。你希望你写的任何东西在写之前都先被缓冲(如果它是通过网络的话这是个好主意)。因此,您可以在FileWriter之上使用BufferedWriter。其他应用程序可能不希望数据被缓冲,因此开发人员不需要添加BufferedWriter。
我们不能预测所有开发人员都需要什么。假设您需要编写数据,现在不需要修改FileWriter,而是创建一个名为Rot13Writer的类来实现rot13。Rot13Writer将获取一个写入器实例,并在将其传递给下一个写入器之前执行rot13。
https://stackoverflow.com/questions/2243441
复制相似问题