gpt4 book ai didi

java - I/O 类缓冲

转载 作者:行者123 更新时间:2023-12-02 04:57:05 25 4
gpt4 key购买 nike

我知道,自 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,以便你可以序列化/反序列化它。

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

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

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

关于java - I/O 类缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28654870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com