Luồng ( InputStream
và OutputStream
) chuyển dữ liệu nhị phân . Nếu bạn muốn viết một chuỗi thành một luồng, trước tiên bạn phải chuyển đổi nó thành byte hoặc nói cách khác là mã hóa nó. Bạn có thể thực hiện thủ công (như bạn đề xuất) bằng cách sử dụng String.getBytes(Charset)
phương thức, nhưng bạn nên tránh String.getBytes()
phương thức đó, vì sử dụng mã hóa mặc định của JVM, không thể dự đoán một cách đáng tin cậy theo cách di động.
Tuy nhiên, cách thông thường để ghi dữ liệu ký tự vào một luồng là bọc luồng trong một Writer
, (thường là a PrintWriter
), đó là chuyển đổi cho bạn khi bạn gọi phương thức write(String)
(hoặc print(String)
) của nó . Trình bao bọc tương ứng cho InputStreams là Reader .
PrintStream
là một OutputStream
triển khai đặc biệt theo nghĩa là nó cũng chứa các phương thức tự động mã hóa chuỗi (nó sử dụng một trình ghi bên trong). Nhưng nó vẫn là một dòng. Bạn có thể bọc luồng của mình một cách an toàn cho bất kỳ nhà văn nào, bất kể đó là một PrintStream
hoặc một số triển khai luồng khác. Không có nguy cơ mã hóa kép.
Ví dụ về PrintWriter với OutputStream:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}