0

我有一个方法,我有一个字符串对象数组,我需要将其写入 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"));

任何人都知道这样做的更好方法,或者可以查看我是否做错了什么?

主意

我可以围绕问题放置一个 try catch 语句以及何时调用byteOut.flush()

提前致谢

4

1 回答 1

3

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

ZipOutputStream您应该在第一个循环中直接写入您的内容。

ZipEntry entry = new ZipEntry(fileName);
zos.putNextEntry(entry);
for (String s : nodeStringArray) {
    zos.write(s.getBytes("UTF-8"));
}
zos.closeEntry();
于 2013-02-22T13:18:11.483 回答