У меня есть очень большой объект, который я хочу сериализовать. Во время процесса сериализации он занимает около 130 МБ кучи в виде weblogic.utils.io.UnsyncByteArrayOutputStream. Я использую BufferedOutputStream для ускорения записи данных на диск, что сокращает время, в течение которого этот объект хранится в памяти.Можно ли буферизировать объекты во время сериализации Java?
Возможно ли использовать буфер для уменьшения размера объекта в памяти? Было бы хорошо, если бы был способ сериализовать его по x байтов за один раз и записать эти байты на диск.
Образец кода следует, если он используется. Там не так много, хотя я не думаю. Если это так, то должна быть полная копия в памяти объекта, который будет сериализован (и, следовательно, нет понятия буфера для сериализации), то я полагаю, что я застрял.
ObjectOutputStream tmpSerFileObjectStream = null;
OutputStream tmpSerFileStream = null;
BufferedOutputStream bufferedStream = null;
try {
tmpSerFileStream = new FileOutputStream(tmpSerFile);
bufferedStream = new BufferedOutputStream(tmpSerFileStream);
tmpSerFileObjectStream = new ObjectOutputStream(bufferedStream);
tmpSerFileObjectStream.writeObject(siteGroup);
tmpSerFileObjectStream.flush();
} catch (InvalidClassException invalidClassEx) {
throw new SiteGroupRepositoryException(
"Problem encountered with class being serialised", invalidClassEx);
} catch (NotSerializableException notSerializableEx) {
throw new SiteGroupRepositoryException(
"Object to be serialized does not implement " + Serializable.class,
notSerializableEx);
} catch (IOException ioEx) {
throw new SiteGroupRepositoryException(
"Problem encountered while writing ser file", ioEx);
} catch (Exception ex) {
throw new SiteGroupRepositoryException(
"Unexpected exception encountered while writing ser file", ex);
} finally {
if (tmpSerFileObjectStream != null) {
try {
tmpSerFileObjectStream.close();
if(null!=tmpSerFileStream)tmpSerFileStream.close();
if(null!=bufferedStream)bufferedStream.close();
} catch (IOException ioEx) {
logger.warn("Exception caught on trying to close ser file stream", ioEx);
}
}
}
Можете ли вы опубликовать некоторый пример кода вашей логики сериализации? Что-то здесь не складывается - откуда взялся бы этот веб-класс? –