Base64到字节数组解码优化-Java

时间:2018-10-10 14:14:58

标签: java android performance base64

我正在尝试将base64中的pdf解码为Android应用程序中的字节数组。这是我的代码:

byte[] documentByte = Base64.decode(pdfBase64, Base64.DEFAULT);

在大多数情况下都能正常工作,但是我收到了一份崩溃报告,似乎它的内存不足。另外,启动应用程序时,该操作已经执行了很多次(我的列表中包含约500个文档),所以我认为,即使对于不会崩溃的设备,以某种方式优化此操作也将是一件好事。 / p>

通过阅读,我发现在编码时,有人将字节数组划分为不完全将其存储在内存中,但是我不知道它是否可以完成解码。

有什么方法可以提高此操作的性能(并尝试避免内存问题)?

1 个答案:

答案 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) {}