I/O 类 缓冲

I/O classes buffering

我知道自从 Java 1.5 PrintWriter 执行内部缓冲,即使它是使用 PrintWriter(String fileName) 构造函数创建的。所以我不需要像这样繁琐的装饰:

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("File")));

所以我想知道手动装饰是否仍然有意义 Streams/Readers/Writers 类 或 PrintWriter 是一个特例?例如:

ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("File")));

在所有教程中,此类内容都没有声明 BufferedOutputStream。但它真的能提高性能吗?或者现在我可以只使用没有中间缓冲区构造函数的构造函数和当前 I/O 类?

PrintWriter 将是一个特例。它的构造函数在内部做

public PrintWriter(String fileName) throws FileNotFoundException {
    this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))),
         false);
}

但是 ObjectOutputStream 并没有发生同样的情况,并且绝对不能概括为不需要装饰器并且可以在新的构造函数实现中添加相同的功能。例如-

ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("File"))); 

你说我想写入一个文件,缓冲内容(以减少多次写入调用),最后你修饰结果 OutputStream 以便你可以 serialize/deserialize 它。

另外,在我看来,使用装饰器与使用相应的构造函数应该不会对性能产生任何影响,因为归根结底,你做的是同样的事情。

Then why in all Serialization tutorials(for example) ObjectOutputStream is created without buffering?

至于序列化 ObjectOutputStream(OutputStream out)BlockDataOutputStream 将 OutputStream 包装出来,它本身是一个缓冲输出流,因此您不需要单独的 BufferedWriter.