請問下InputStreamReader,OutputStreamWriter在什么時候使用呢?


InputStreamReader可以理解一些,比如一些地方只能傳輸字節,不能傳輸字符,那么我就只能夠將文件以字節的格式進行傳入 。
之后我在程序中將這些字節數據轉換成了字符數據。  
然后讓接受方直接接受字符就行。 
既然已經轉換成了字符,直接使用字符流進行操作就就可以了。 
還用一個 OutputStreamWriter去包裝 OutputStream有什么意義呢。

就是說我一個中文的文檔,因為一些技術原因,需要被轉換成字節流才能傳入到程序里。 
然后我再程序里對接受到的字節其進行轉換,保存在一個 String 之中。

之后如果我要寫入,我可以直接使用字符流,而沒有必要再用一個 OutputStreamWriter 包裝一個 OutputStream 去寫入到文件里吧。
如果非要再包裝成字節流進行傳輸,直接進行字節傳輸就好了 。

7 个解决方案

#1


這個問題很多人提過,網上比較多的解釋主要是效率、OutputStreamWriter能指定編碼,都是在基於這個類已經設計出來的基礎上,俺也想知道,JAVA設計這個類的好處,求大神指點!

#2


在讀寫文本文件的時候使用。

#3


數據傳輸、存儲都是用二進制進行的,比如文件、Socket等等,這就必須要使用InputSteam、OutputStream;
String僅僅限於java語言內的傳輸,想要保存成文件只用字符流是無法實現的;通過其他協議傳輸自然也不成了
最后lz說的字符流具體是啥呀,OutputStreamWriter 人家就是字符流!

#4


樓主的意思可能是對於txt這些字符流文件可以用FileWriter直接就寫入進去了,為什么還要設計出這個類OutputStreamWriter

#5


兼容更多數據格式吧

#6


InputStream和OutputStream是java io中的基本輸入輸出管道,用來傳輸字節序列
經常發生在文件讀寫和網絡IO操作中.
InputStreamReader和OutputStreamWriter是Reader和Writer的實現,
Reader和Writer是在字符層面的輸入輸出管道.
我覺得你的疑惑並不在於java.io下的一堆類,而是而是對於字節和字符的概念.

字節是計算機數據的最基本表示,網絡傳說或者文件存儲,無論內容如何,最終都是一長串的字節序列.
而字符通常是對於人類能夠理解的文字的計算機存儲表達方式,因為太多,所以一個字節無法完全表達,
所以出現了GBK,UTF-8,Unicode等編碼方式,所以字符其實就是某種編碼格式的字節序列映射
比如,"中"字,使用GBK編碼時,為0xD6 0xD0.而在UTF-8中則為:0xE4 0xB8 0xAD
你當然可以使用OutputStream.write("中".getBytes("GBK"))這種方式來輸出一個字符.
但是,new OutputStreamWriter(os,"GBK")的好處需要你慢慢體會,當你系統足夠復雜,模塊足夠多的時候,你就能慢慢理解

#7


樓上說的有道理,你可以嘗試寫個這樣的一個小程序,通過程序復制一個圖片,用字節流做的時候復制的是沒問題的,而用字符流做的時候圖片的大小會變小,而且打不開。FileReader在默認的GBK編碼表中如果找到了對應的字符就返回,如果沒有對應的字符,
  那么會返回一個未知字符對應的數字,未知字符占一個字節(如果原來是2個字節 此處返回1個字節   就有丟失現象了),各有優缺點吧,用多了就知道適宜的情況了

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com