有没有一种有效的方法将bytearrays(gzip)解压缩到String?

时间:2016-03-21 12:03:43

标签: java android out-of-memory gzip compression

我正在尝试解压缩大约1,500,000字节的大字节数组。

数据从web服务中检索为bas64字符串,我首先将其解码为bytearray。

bytearray由压缩的JSON字符串组成,我不想通过GSON读取对象模型。

在我开始下面的解压缩方法之前,我的应用程序使用了大约12MB RAM:

public static String decompress(byte[] arr) {
        if(arr == null || arr.length == 0)
            return null;

        byte[] buffer = new byte[1024];

        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream(arr.length);
            GZIPInputStream gzip = new GZIPInputStream(new ByteArrayInputStream(arr));
            int len;
            while ((len = gzip.read(buffer)) > 0) {
                out.write(buffer, 0 ,len);
            }
            gzip.close();
            out.close();
            System.gc();
            return out.toString("UTF-8");

        } catch (IOException e) {
           e.printStackTrace();
           return null;
        } catch (OutOfMemoryError e) {
            e.printStackTrace();
            return null;
        }
    }

在写入输出流时,会发生OOM异常。

我已经检查了很多SO问题,但我得到的唯一提示是将其编码为流媒体流程会有所帮助,但这根本不能解释,我在网上找不到任何线索。 因此,如果有人知道是否可以执行减压记忆效果,请将其删除或链接一篇涵盖该主题的文章。

0 个答案:

没有答案