OutOfMemoryError во время записи строки в ByteArrayOutputStream
У меня есть метод, который у меня есть массив объектов String, которые мне нужно записать в ByteArrayOutputStream, который позже я запишу в ZipOutputStream.
Вот мой код
// SAVE THE STRING AS A BYTE ARRAY IN MEMORY INSTEAD OF CREATING AND SAVING TO A NEW FILE
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream byteOut = new DataOutputStream(baos);
byte[] data;
if (i == 1) {
if (nodeStringArray != null) {
for (String s : nodeStringArray) {
byteOut.write(s.getBytes("UTF-8"));
}
}
} else {
data = stringArray.get(i).getBytes("UTF-8");
byteOut.write(data);
}
byteOut.close();
byte[] input = baos.toByteArray();
ZipEntry entry = new ZipEntry(fileName);
entry.setSize(input.length);
zos.putNextEntry(entry);
zos.write(input);
zos.closeEntry();
Проблема в том, и я получил только отчет о сбое, я получаю OutOfMemoryError
на строке, которая читает byteOut.write(s.getBytes("UTF-8"));
Кто-нибудь знает лучший способ сделать это или может понять, что я делаю что-то не так?
IDEA
Могу ли я поставить оператор try catch для решения проблемы, и когда это произойдет, byteOut.flush()
?
заранее спасибо
1 ответ
Решение
Вы делаете для многих копий данных, и это приводит к нехватке памяти.
Вы должны прямо писать в свой ZipOutputStream
в вашем первом цикле.
ZipEntry entry = new ZipEntry(fileName);
zos.putNextEntry(entry);
for (String s : nodeStringArray) {
zos.write(s.getBytes("UTF-8"));
}
zos.closeEntry();