- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道,自 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/
我是一名优秀的程序员,十分优秀!