将字符串写入ByteArrayOutputStream时出现OutOfMemoryError

时间:2013-02-22 13:10:25

标签: android bytearray 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 个答案:

答案 0 :(得分:3)

你正在制作许多数据副本,这导致你的内存不足。

您应该在第一个循环中直接写入ZipOutputStream

ZipEntry entry = new ZipEntry(fileName);
zos.putNextEntry(entry);
for (String s : nodeStringArray) {
    zos.write(s.getBytes("UTF-8"));
}
zos.closeEntry();