我正在尝试解压缩大约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问题,但我得到的唯一提示是将其编码为流媒体流程会有所帮助,但这根本不能解释,我在网上找不到任何线索。 因此,如果有人知道是否可以执行减压记忆效果,请将其删除或链接一篇涵盖该主题的文章。