【问题标题】:Base64 to byte array decode optimization - JavaBase64 到字节数组解码优化 - Java
【发布时间】:2018-10-10 14:14:57
【问题描述】:

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

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

这在大多数情况下都可以,但我收到了一份崩溃报告,其中似乎内存不足。另外,这个操作在启动应用程序时执行了很多次(我有一个包含大约 500 个文档的列表),所以我认为,即使对于不会崩溃的设备,以某种方式优化这个操作也会很好。

阅读后发现,有些人在编码的时候,将字节数组分割,不完全存储在内存中,不知道能不能解码。

有什么方法可以提高这个操作的性能(并尽量避免内存问题)?

【问题讨论】:

  • 你真的在启动应用时加载了500个文档吗?只是不要这样做!
  • @maaartinus 这不是我能改变的,这是客户需要的。无论如何,这是一个极端的情况,通常不会发生,但我必须牢记这一点。你知道有什么解决办法吗?

标签: java android performance base64


【解决方案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) {}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2016-10-31
    • 2013-01-12
    相关资源
    最近更新 更多