我有幾個輸出監聽器正在實現OutputStream。 它可以是PrintStream寫入標準輸出或文件,也可以寫入內存或任何其他輸出目標;因此,我在該方法中將OutputStream指定爲(an)參數。將字符串寫入輸出流
現在,我收到了字符串。在這裏寫入流的最佳方式是什麼?
我應該只使用Writer.write(message.getBytes())嗎?我可以給它的字節,但如果目標流是一個字符流,那麼它會自動轉換?
我需要在這裏使用一些網橋流嗎?
我有幾個輸出監聽器正在實現OutputStream。 它可以是PrintStream寫入標準輸出或文件,也可以寫入內存或任何其他輸出目標;因此,我在該方法中將OutputStream指定爲(an)參數。將字符串寫入輸出流
現在,我收到了字符串。在這裏寫入流的最佳方式是什麼?
我應該只使用Writer.write(message.getBytes())嗎?我可以給它的字節,但如果目標流是一個字符流,那麼它會自動轉換?
我需要在這裏使用一些網橋流嗎?
流(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();
}
用PrintWriter包裝您的OutputStream並使用該類的打印方法。他們接受一個字符串併爲你做這項工作。
您可以創建一個在你的OutputStream一個PrintStream包裝,然後就調用它的打印(串):
final OutputStream os = new FileOutputStream("/tmp/out");
final PrintStream printStream = new PrintStream(os);
printStream.print("String");
printStream.close();
PrintStream使用什麼字符集轉換爲字節? – 2016-01-31 15:56:59
的OutputStream寫入字節,字符串提供了字符。您需要定義字符集編碼字符串爲byte []:
outputStream.write(string.getBytes(Charset.forName("UTF-8")));
更改UTF-8
到您選擇的字符集。
附加下面一行。 'ByteArrayOutputStream outputStream = new ByteArrayOutputStream();' – 2017-12-27 09:22:25
By design它做這種方式:
OutputStream out = ...;
try (Writer w = new OutputStreamWriter(out, "UTF-8")) {
w.write("Hello, World!");
} // or w.close(); //close will auto-flush
請注意,'w.close()'也會關閉'out'。 – 2018-01-11 16:32:18
您可以使用Apache Commons IO:
try (OutputStream outputStream = ...) {
IOUtils.write("data", outputStream, "UTF-8");
}
我不知道,但是這聽起來像你試圖在這裏重新發明輪子,你有沒有看過J? ava Base API以及Commons IO API? – posdef 2010-11-01 12:57:05