[英]Write string to output stream
我有幾個正在實現OutputStream
輸出偵聽器。 它可以是寫入標准輸出或文件的PrintStream
,也可以是寫入內存或任何其他輸出目的地; 因此,我在方法中將OutputStream
指定為 (an) 參數。
現在,我收到了String
。 在這里寫入流的最佳方式是什么?
我應該只使用Writer.write(message.getBytes())
嗎? 我可以給它字節,但是如果目標流是字符流,那么它會自動轉換嗎?
我需要在這里使用一些橋接流嗎?
流( InputStream
和OutputStream
)傳輸二進制數據。 如果要將字符串寫入流,則必須首先將其轉換為字節,或者換句話說,對其進行編碼。 您可以使用String.getBytes(Charset)
方法手動執行此操作(如您所建議的那樣),但您應該避免使用String.getBytes()
方法,因為它使用 JVM 的默認編碼,在一種便攜的方式。
但是,將字符數據寫入流的常用方法是將流包裝在Writer
(通常是PrintWriter
)中,當您調用它的write(String)
(或print(String)
)方法時,它會為您進行轉換. InputStreams 的相應包裝器是Reader 。
PrintStream
是一種特殊的OutputStream
實現,因為它還包含自動編碼字符串的方法(它在內部使用編寫器)。 但它仍然是一個流。 無論是PrintStream
還是其他一些流實現,您都可以安全地使用編寫器包裝您的流。 沒有雙重編碼的危險。
帶有 OutputStream 的 PrintWriter 示例:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
OutputStream 寫入字節,String 提供字符。 您需要定義 Charset 將字符串編碼為 byte[]:
outputStream.write(string.getBytes(Charset.forName("UTF-8")));
將UTF-8
更改為您選擇的字符集。
您可以創建一個環繞輸出流的 PrintStream,然后將其稱為 print(String):
final OutputStream os = new FileOutputStream("/tmp/out");
final PrintStream printStream = new PrintStream(os);
printStream.print("String");
printStream.close();
按照設計,它是這樣完成的:
OutputStream out = ...;
try (Writer w = new OutputStreamWriter(out, "UTF-8")) {
w.write("Hello, World!");
} // or w.close(); //close will auto-flush
用PrintWriter包裝您的 OutputStream 並使用該類上的打印方法。 他們接受一個字符串並為您完成工作。
您可以使用Apache Commons IO :
try (OutputStream outputStream = ...) {
IOUtils.write("data", outputStream, "UTF-8");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.