比较输出流性能
Compare output stream performance
我有一个可序列化的对象,我想将它写入文件。我应该使用 ObjectOutputStream.writeObject()
还是将其转换为 byte[]
(使用 ObjectOutputStream
)然后使用 FileOutputStream.write()
?
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file))
objectOutputStream.writeObject(myObject);
或
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out;
out = new ObjectOutputStream(byteOut);
out.writeObject(myObject);
new FileOutputStream(file).write(byteOut.toByteArray());
缓冲可以通过将小的写入合并为更大的批量写入来提高性能。如果您想引入缓冲,请使用 BufferedOutputStream
,它会在不更改下游代码的情况下对字节数组流执行您正在做的事情。
// Unbuffered
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
// Buffered
ObjectOutputStream outputStream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
这样您就可以继续使用 ObjectOutputStream
而无需其余代码知道流是缓冲的还是非缓冲的。
与任何与性能相关的更改一样,您应该对这两种方法进行基准测试,看看哪种方法性能更好。未经实证检验,请勿进行此类更改。如果你不测试,你只是在猜测。
我有一个可序列化的对象,我想将它写入文件。我应该使用 ObjectOutputStream.writeObject()
还是将其转换为 byte[]
(使用 ObjectOutputStream
)然后使用 FileOutputStream.write()
?
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file))
objectOutputStream.writeObject(myObject);
或
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out;
out = new ObjectOutputStream(byteOut);
out.writeObject(myObject);
new FileOutputStream(file).write(byteOut.toByteArray());
缓冲可以通过将小的写入合并为更大的批量写入来提高性能。如果您想引入缓冲,请使用 BufferedOutputStream
,它会在不更改下游代码的情况下对字节数组流执行您正在做的事情。
// Unbuffered
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
// Buffered
ObjectOutputStream outputStream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
这样您就可以继续使用 ObjectOutputStream
而无需其余代码知道流是缓冲的还是非缓冲的。
与任何与性能相关的更改一样,您应该对这两种方法进行基准测试,看看哪种方法性能更好。未经实证检验,请勿进行此类更改。如果你不测试,你只是在猜测。