DataOutputStream()VS DataOutputStream(new BufferedOutputStream())

时间:2011-11-13 05:14:54

标签: java io

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

代码片段如下所示:

//..
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已经提供了缓冲文件输出字节流。那么“双缓冲”真的需要吗?

我修改了2行代码(输出和输入),取消了BufferedOutputStreamBufferedInputStream,一切似乎都运行得很好,所以我想知道这是什么目的BufferedOutputStreamBufferedInputStream

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

我曾经认为Java IO模型不必要地大,但现在我真的“得到它”我发现它非常优雅。 BufferedOutputStream是Decorator模式的一个实现(google it ...它很有用)。这意味着BufferedOutputStream只是将功能添加到它包装的输出流中。在内部,BufferedOutputStream调用它装饰的OutputStream。

答案 2 :(得分:1)

缓冲IO流可帮助您批量读取,从而显着降低IO成本。 IO过程相当昂贵。想象一下,您的应用程序对读取/写入的每个字节执行完整的读/写循环,而不是一次读取/写入大量数据。执行缓冲读/写肯定非常有效。如果你在两种情况下收集一些性能统计数据,你会注意到效率的巨大差异,即w和没有缓冲IO,特别是在读/写大量数据时。