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