Оптимизация декодирования массива от Base64 до байтов - Java - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь декодировать pdf в base64 в байтовый массив в приложении для Android.вот мой код:

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

, который работает нормально в большинстве случаев, но я получил отчет о сбое, в котором, похоже, не хватает памяти.Кроме того, эта операция выполняется много раз при запуске приложения (у меня есть список из около 500 документов), поэтому я думаю, что даже для устройств, которые не выходят из строя, было бы хорошо как-то оптимизировать эту операцию.

Читая об этом, я обнаружил, что при кодировании некоторые люди разделяют байтовый массив, чтобы не полностью сохранить его в памяти, но я не знаю, можно ли это сделать декодированием.

Есть ли способ улучшить производительность для этой операции (и попытаться избежать проблемы с памятью)?

1 Ответ

0 голосов
/ 15 октября 2018

Я бы посоветовал вам не загружать всю строку 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) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...