2013-08-19 83 views
1

OutputStreamWriter將Writer接口後面的OutputStream封裝起來。如果我想要反過來,我想要一個Writer的OutputStream接口?例如,我想序列化一個對象到一個StringWriter。什麼是OutputStreamWriter的反轉

+0

'OutputStreamWriter' _writes_到'OutputStream'。一位作家寫道。你不能寫信給它。然而,你可以寫入一個'BinaryOutputStream',獲取字節並將它們轉換爲'String',如果這就是你的意思 –

+0

你可以展示你想要實現的代碼的例子嗎?目前還不清楚你爲什麼需要它。 –

+1

@LewsTherin爲什麼WriterOutputStream沒有意義? Java API充滿了可以以各種方式組合的包裝類。你能否詳細說明你的觀點? – Mishax

回答

1

OutputStreamWriter的語義是取文本並根據字符編碼轉換爲字節。這是一種非常常見的模式(將低級字節解釋爲高級文本),因此將此類作爲標準Java API的一部分來找到並不奇怪。

所以你想要一個WriterOutputStream。但是你忘了告訴我們你期望這樣一堂課的語義。我可以想像幾個用例用於OutputStream包裹一個Writer

  • 轉換字節到Base64編碼的字符串
  • 轉換字節爲十六進制的表值
  • 假設字節流的加密文本消息:解密字節並寫入原始未加密的文本。
  • 假設字節流是某種測量設備的值:寫一個包含測量值的人類可讀表。

但沒有明顯的默認使用情況,這對廣泛的用法是有意義的。所以標準庫中沒有WriterOutputStream類。但是沒有人會阻止你寫出你自己的一類。

+0

好吧,vanje你有一個點,但另一方面OutputStreamWriter聲明一個構造函數,它接受一個OutputStream,其中應用了「默認字符編碼」。如果API支持按照某個默認值將面向字節的流轉換爲面向字符的流,那麼我是否應該預料到我可以做相反的事情,也有這樣的默認值?由於API沒有WriterOutputStream,最簡單的解決方法是什麼?這就是我(仍然)在尋找的東西。 – Mishax

+1

@Mishax:最簡單的解決方法是將您的字節寫入ByteArrayOutputStream,然後以適當的字符集名稱作爲參數調用toString()。 –

+0

@JBNizet我同意你的目標不過是一個字符串。但是如果目標是Writer,意味着從輸出流開始,(1)然後將其發送到ByteArrayOutputStream,(2)然後toString(),(3)創建一個Writer(4)寫我的String。呼!如果這是最簡單的解決方法,那麼可以,但是當然像Guava類的東西要簡單得多。 – Mishax

3

番石榴有這樣一個類:BaseEncoding.encodingStream(Writer)需要一個Writer作爲參數,並將其包裝在一個OutputStream中。所有寫入流的字節都是baseXX編碼的(其中XX可以是16,32,64,...)並寫入包裝的Writer中作爲字符。