请问下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个字节   就有丢失现象了),各有优缺点吧,用多了就知道适宜的情况了

注意!

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



 
  © 2014-2022 ITdaan.com 联系我们: