【问题标题】:OutOfMemoryError Whilst Writing a String to a ByteArrayOutputStream将字符串写入 ByteArrayOutputStream 时出现 OutOfMemoryError
【发布时间】:2013-02-22 13:10:25
【问题描述】:

我有一个方法,我有一个 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();

问题是,我只收到了关于它的崩溃报告,我在byteOut.write(s.getBytes("UTF-8")); 的行上收到了一个OutOfMemoryError

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

想法

我能否针对该问题添加一个 try catch 语句,并在它发生时调用 byteOut.flush()

提前致谢

【问题讨论】:

    标签: android bytearray bytearrayoutputstream


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      相关资源
      最近更新 更多