На вход приходит byte[] fileData, надо получить на выходе закодированный String
String encoded = Base64.getEncoder().encodeToString(fileData)
выбрасывает Out of memory.
Можно ли как-то закодировтаь по частям и потом собрать все это в String?
Надо кодировать кусками, просто при этом надо держать в голове, что по сути алгоритм base64 - это превращение 3 байт - в 4 байта, то есть если длина исходного бинарного массива кратна 3, то никаких проблем не возникает, проблема возникает только если длина массива некратна 3 - тогда начинается всякая муть связанная с выравниванием - в стандарте символ выравнивания это =
(хотя можно и другой). Например:
abc - YWJj
ab - YWI=
a - YQ==
соответственно при кодировании кусками надо учитывать эту особенность base64:
private static final int BUFFER_SIZE = 3 * 1024;
try ( BufferedInputStream in = new BufferedInputStream(input, BUFFER_SIZE); ) {
Base64.Encoder encoder = Base64.getEncoder();
StringBuilder result = new StringBuilder();
byte[] chunk = new byte[BUFFER_SIZE];
int len = 0;
while ( (len = in.read(chunk)) == BUFFER_SIZE ) {
result.append( encoder.encodeToString(chunk) );
}
if ( len > 0 ) {
chunk = Arrays.copyOf(chunk,len);
result.append( encoder.encodeToString(chunk) );
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем привет , писал код и вдруг IDE начала выдавать ошибку "cannot resolve a symbol"Помогите пожалуйста решить проблему
Доходы фитнесс-клуба состоят из покупок абонементов и складываются в таблицу:
Подскажите как сделать запрос в БД, чтобы выбрать только такие записи, в которых пользователь имеет определённый пол?