0

私は、後でZipOutputStreamに書き込むByteArrayOutputStreamに書き込む必要があるStringオブジェクトの配列を持つメソッドを持っています。

これが私のコードです。

// 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 ステートメントを配置し、それが発生したときに call でき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 に答える