Потоки ( 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();
}