Потоки (InputStream
и OutputStream
) передают двоичные данные. Если вы хотите записать строку в поток, вы должны сначала преобразовать ее в байты или, другими словами, кодировать ее. Вы можете сделать это вручную (как вы предлагаете), используя метод String.getBytes(Charset)
, но вам следует избегать метода String.getBytes()
, потому что он использует кодировку JVM по умолчанию, которая не может быть надежно предсказана переносимым способом.
Обычный способ записи символьных данных в поток, однако, заключается в том, чтобы обернуть поток в Writer
(часто PrintWriter
), который выполняет преобразование для вас, когда вы вызываете его write(String)
(или print(String)
) метод. Соответствующей оболочкой для InputStreams является Reader .
PrintStream
- это специальная реализация OutputStream
в том смысле, что она также содержит методы, которые автоматически кодируют строки (она использует средство записи для внутреннего использования). Но это все еще поток. Вы можете безопасно обернуть свой поток с помощью устройства записи, независимо от того, является ли он PrintStream
или какой-либо другой реализацией потока. Нет опасности двойного кодирования.
Пример PrintWriter с OutputStream:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}