я по существу иметь точную напротив проблемы, какJava 8 Base64 Encode (Basic) больше не добавляет новую строку. Как я могу переопределить это?
new-line-appending-on-my-encrypted-string
Похоже старой утилиты Java Base64 всегда добавляет новые строки каждые 76 символов при возврате строки, но используя следующий код, я не Мне нужны эти перерывы.
Path path = Paths.get(file);
byte[] data = Files.readAllBytes(path);
String txt= Base64.getEncoder().encodeToString(data);
Есть ли простой способ сказать кодировщику, чтобы добавить новые строки?
Я попытался внедрить строковый конструктор, чтобы вставлять символы новой строки, но он меняет весь вывод (я копирую текст из java-консоли в редактор HxD и сравниваю с моим известным рабочим «BLOB» с символами новой строки).
String txt= Base64.getEncoder().encodeToString(data);
//Byte code for newline
byte b1 = 0x0D;
byte b2 = 0x0A;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < txt.length(); i++) {
if (i > 0 && (i % 76 == 0)) {
sb.append((char)b1);
sb.append((char)b2);
}
sb.append(txt.charAt(i));
}
EDIT (в ответ на вопрос):
Это не самая простая вещь, чтобы объяснить, но когда я не использую строку строитель, выход закодировать начнет так:
AAAAPAog4lBVgGJrT2b + mQVicHN3d //////// 3hhcDJiLWVtMjUwLWVtMjUwLWRldjA0NTUAAAAAAA
Но я хочу, чтобы выглядеть следующим образом:
AAAAPAog4lBVgGJrT2b + mQVicHN3d ///// ///3hhcDJiLWVtMjUwLWVtMjUwLWRldjA0NTUAAAAA..AA
Как вы можете видеть, «..» представляет 0x0D и 0x0A или символ новой строки, которая insterted на 76-й символ (это то, что старый base64 будет выводить).
Однако, когда я добавляю байты b1 и b2 (перевод строки) после 76-го символа, выход становится:
BPwAFHwA0CUFoG8AgDRCAAIlQgAAJUIAAhUfNEIAAiUkmw/0fADQFSInART/ADUlfADQFQE0fADQ ..
Так это выглядит как ".." находится в нужном месте, но все до того, как оно изменилось.
Спасибо!
Как это «изменить весь вывод»? – immibis
'txt.replaceAll (". {76} "," $ 0 \ r \ n ")' – aioobe