BufferedWriter out = new BufferedWriter( new OutputStreamWriter( new BufferedOutputStream( new FileOutputStream("out.txt") ) ) );

因此,让我看看,如果我理解这一点:一个字节输出流被打开文件“out.txt”。然后将其输送到缓冲输出流,以使文件操作更快。所缓冲的流被馈送到一个输出流写入器从字节字符弥合。最后,该写入器被馈送到缓冲作家...这增加了缓冲的另一层?

嗯...

有帮助吗?

解决方案

是的,你是正确的。

我觉得在这种情况下,你可以做很多短(也见的的BufferedWriter

BufferedWriter out = new BufferedWriter(new FileWriter("foo.out"));

或者如果你想漂亮的打印功能:

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

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

在Java流和作家的包装,以便您可以(像你这样通过堆叠他们的手段),它们组装到自己的需要。这些类不看什么类型的流/作家它们堆叠起来。在你的情况有几个缓冲区将意味着你实际上有两个缓冲区,在两个不同的类别。这意味着他们会采取一些额外的内存可能还有一些性能损失,但最有可能你永远不会注意到这一点(因为它相对于其他性能因素只是一个小的开销)。

其他提示

这是装饰图案的一个例子。我们的想法是不修改类的功能添加到一个类。在您的例子中,你有一个FileWriter。你想你写什么先写之前要缓冲(好主意,如果它是在网络上)。所以,你的FileWriter的上面一层的BufferedWriter。其他应用可能不希望对数据进行缓冲,所以开发者不会需要添加的BufferedWriter。

我们无法预料所有的开发人员将需要的东西。假设你需要 ROT13 的数据,现在不是修改的FileWriter,为您打造一个一流的呼叫Rot13Writer实现作家。该Rot13Writer将采取作家的实例,并且将其传递到下一个写入器之前执行ROT13。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top