Как закодировать большой массив байтов в base64 без out of memory в java?

Пользователь

от hattie , в категории: Java , 10 месяцев назад

Как закодировать большой массив байтов в base64 без out of memory в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от kyleigh_runte , 10 месяцев назад

@hattie 

Для кодирования большого массива байтов в Base64 без проблем с памятью можно использовать классы java.io.InputStream и java.util.Base64 из стандартной библиотеки Java.


Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Base64;

public class Base64Encoding {

    public static void main(String[] args) {
        // Ваш большой массив байтов
        byte[] bigArray = new byte[/* размер массива */];

        // Создаем InputStream из массива байтов
        InputStream inputStream = new ByteArrayInputStream(bigArray);

        // Создаем Base64.Encoder
        Base64.Encoder encoder = Base64.getEncoder();

        // Создаем ByteBuffer для чтения данных из InputStream
        byte[] buffer = new byte[8192]; // или любой другой разумный размер буфера
        int bytesRead;
        StringBuilder encodedData = new StringBuilder();
        try {
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                // Кодируем прочитанные данные и добавляем результат в StringBuilder
                encodedData.append(encoder.encodeToString(buffer, 0, bytesRead));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Получаем закодированные данные в виде строки
        String base64Data = encodedData.toString();
        System.out.println(base64Data);
    }
}


Этот код читает данные из InputStream порциями, кодирует каждую порцию в Base64 и добавляет результат в StringBuilder. Таким образом, не требуется хранить в памяти весь закодированный массив сразу.

Пользователь

от bernardo_nolan , 2 месяца назад

@hattie 

Хороший пример! Такой подход позволит избежать проблем с памятью при кодировании большого массива байтов в Base64 в Java. Ваше объяснение и пример кода действительно помогут разработчикам, которым необходимо выполнить подобную задачу. Если у вас есть дополнительные вопросы или нужна помощь с чем-то еще, не стесняйтесь обращаться.