比较输出流性能



我有一个可序列化的对象,我想把它写到文件中。我应该使用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,而不必让代码的其余部分知道流是缓冲的还是非缓冲的。

与任何与性能相关的更改一样,您应该对这两种方法进行基准测试,看看哪种方法的性能更好。不要在没有实证检验的情况下做出这样的改变。如果你不测试,你只是在猜测。

最新更新