Сравните производительность выходного потока - PullRequest
0 голосов
/ 29 марта 2020

У меня есть сериализуемый объект, и я хочу записать его в файл. Должен ли я использовать 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());

1 Ответ

3 голосов
/ 29 марта 2020

Буферизация может улучшить производительность, объединив небольшие записи в большие массовые записи. Если вы хотите ввести буферизацию, используйте BufferedOutputStream, что делает то, что вы делаете с потоком байтового массива, без изменения нижестоящего кода.

// Unbuffered
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));

// Buffered
ObjectOutputStream outputStream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)));

Таким образом, вы можете продолжать использовать ObjectOutputStream без остальная часть кода должна знать, буферизован или небуферизован поток.

Как и в случае любого изменения, связанного с производительностью, вы должны сравнить оба подхода, чтобы увидеть, какой из них работает лучше. Не вносите подобные изменения без эмпирического тестирования. Если вы не тестируете, вы просто угадываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...