Os fluxos ( InputStream
e OutputStream
) transferem dados binários . Se você deseja gravar uma sequência em um fluxo, primeiro deve convertê-la em bytes ou, em outras palavras, codificá- la. Você pode fazer isso manualmente (como sugere) usando o String.getBytes(Charset)
método, mas evite o String.getBytes()
método, porque ele usa a codificação padrão da JVM, que não pode ser prevista com segurança de maneira portátil.
A maneira usual de gravar dados de caracteres em um fluxo, no entanto, é agrupar o fluxo em um Writer
(geralmente a PrintWriter
), que faz a conversão quando você chama o método write(String)
(ou print(String)
). O wrapper correspondente para InputStreams é um Reader .
PrintStream
é uma OutputStream
implementação especial no sentido de que também contém métodos que codificam automaticamente seqüências de caracteres (ele usa um gravador internamente). Mas ainda é um riacho. Você pode agrupar seu fluxo com segurança com um gravador, independentemente de ser uma PrintStream
ou outra implementação de fluxo. Não há perigo de codificação dupla.
Exemplo de PrintWriter com OutputStream:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}