比较输出流性能

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 而无需其余代码知道流是缓冲的还是非缓冲的。

与任何与性能相关的更改一样,您应该对这两种方法进行基准测试,看看哪种方法性能更好。未经实证检验,请勿进行此类更改。如果你不测试,你只是在猜测。