Потоки ( InputStream
и OutputStream
) передают двоичные данные. Если вы хотите записать строку в поток, вы должны сначала преобразовать ее в байты или, другими словами, закодировать ее. Вы можете сделать это вручную (как вы предлагаете), используя String.getBytes(Charset)
метод, но вам следует избегать этого String.getBytes()
метода, поскольку он использует кодировку JVM по умолчанию, которую нельзя надежно предсказать переносимым способом.
Однако обычный способ записи символьных данных в поток - это заключить поток в объект Writer
(часто a 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();
}