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

3

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

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

这对于大多数情况都可以正常工作,但我收到了一份崩溃报告,似乎是出现了内存不足的情况。此外,当启动应用程序时(我有一个包含约500个文档的列表),这个操作会被执行很多次,因此我认为,即使是那些没有崩溃的设备,也可以通过某种方式来优化这个操作。

阅读相关资料后,我发现,在编码时,有些人将字节数组分成几部分以避免完全存储在内存中,但我不知道是否可以在解码时进行。

是否有任何方法可以改进该操作的性能(并尝试避免内存问题)?


你真的会在启动应用程序时加载500个文档吗?千万不要这样做! - maaartinus
@maaartinus 这不是我能改变的事情,这是客户要求的。无论如何,那只是一个极端情况,通常不会发生,但我必须牢记在心。你知道有什么解决办法吗? - Jaime Alcántara Arnela
1个回答

2
我建议您不要将整个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) {}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接