Кодировка base64 для двоичного файла png не работает JDK 11.0.3 + 7 Eclipse 4.11.0 - PullRequest
1 голос
/ 21 апреля 2020

Следующий код

import java.util.Base64;

try (final InputStream fis = new FileInputStream(new File("foobar.png"))) {
    final String str = Base64.getEncoder().encodeToString(fis.readAllBytes());

    System.out.println("+++" + str + "+++"); // prints nothing!

    System.out.println("+++" + str.length() + "+++"); // +++34500+++
    System.out.println("+++" + str.isBlank() + "+++"); // +++false+++

    try (final OutputStream os = new FileOutputStream(new File("foobar.txt"))) {
        os.write(str.getBytes()); // empty file!
    }

    final String str2 = "foobar";
    try (final OutputStream os2 = new FileOutputStream(new File("foobar2.txt"))) {
        os2.write(Base64.getEncoder().encodeToString(str2.getBytes()); // This works!
    }
}

ничего не печатает при первом вызове System.out.println. Что не так? Более того, когда я записываю файл со строкой в ​​кодировке base64, файл становится пустым.

Когда я записываю все прочитанные байты обратно в файловую систему без кодировки base64, эти два файла равны. Итак, все в порядке. Но что не так с кодировкой?

foobar.png имеет 26 КиБ в файловой системе.

Принять JDK 11.0.3 + 7

Затмение: 2019-03 (4.11. 0)

Решение

Спасибо Роберту. Это, очевидно, только проблема с отображением в моей версии Eclipse .

1 Ответ

4 голосов
/ 21 апреля 2020

Скорее всего, вы выполняете этот код Java в среде IDE, такой как Eclipse.

Например, в Eclipse есть ошибка, что слишком длинные строки не печатаются: 541104 / 23406 .

В вашем случае строка в кодировке base64 имеет 34500 символов, что достаточно для запуска этой ошибки.

Последняя версия Eclipse (2020-03), использующая OpenJDK 1.0.7 на Windows 10, 64-битная, по-видимому, способна отображать еще несколько символов (например, в быстром тесте была видна строка с 67000 символов). ).

Но не забудьте увеличить Console buffer size в настройках Eclipse (Run / Debug -> Console).

...