DataOutputStream() VS DataOutputStream(new BufferedOutputStream())

2022-09-04 20:11:36

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

代码片段如下所示:

//..
out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));
//..
in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));
//..

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

这不是多余的吗,因为这种替代方案也有效?:new DataOutputStream(new FileOutputStream(dataFile));

正如本页所述,DataStreams 已经提供了一个缓冲文件输出字节流。那么,“双缓冲”真的需要吗?

我已经修改了2行代码(输出和输入),拿走了和,一切似乎都很好,所以我想知道和的目的是什么?BufferedOutputStreamBufferedInputStreamBufferedOutputStreamBufferedInputStream


答案 1

将 FileOutputStream 包装在 BufferedOutputStream 中通常会加快程序的整体输出速度。这只有在写入大量数据时才会很明显。将输入流包装在缓冲的输入流中也是如此。缓冲液的使用只会影响效率,而不会影响正确性。


答案 2

这不是多余的,只是不同。这些变体添加了一个缓冲层,通过批处理读取和写入来加快 IO 操作。Buffered

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


推荐