我正在尝试将base64中的pdf解码为Android应用程序中的字节数组。这是我的代码:
byte[] documentByte = Base64.decode(pdfBase64, Base64.DEFAULT);
在大多数情况下都能正常工作,但是我收到了一份崩溃报告,似乎它的内存不足。另外,启动应用程序时,该操作已经执行了很多次(我的列表中包含约500个文档),所以我认为,即使对于不会崩溃的设备,以某种方式优化此操作也将是一件好事。 / p>
通过阅读,我发现在编码时,有人将字节数组划分为不完全将其存储在内存中,但是我不知道它是否可以完成解码。
有什么方法可以提高此操作的性能(并尝试避免内存问题)?
答案 0 :(得分:1)
我建议您不要将整个base64字符串加载到内存中。使用InputStream
将数据的一部分加载到字节数组中,从字节数组中解码base64并将结果附加到缓存文件中,如下所示:
try {
InputStream in = new ByteArrayInputStream(base64.getBytes());
FileOutputStream out = new FileOutputStream(resultPath);
while (in.available() > 0) {
byte[] buffer = new byte[1024];
in.read(buffer);
byte[] decoded = Base64.decode(buffer, Base64.DEFAULT);
out.write(decoded, 0, decoded.length);
}
} catch (FileNotFoundException e) {
} catch (IOException e) {}