黑马程序员技术交流社区

标题: 转换流 [打印本页]

作者: hadexs    时间: 2013-5-29 11:20
标题: 转换流
InputStreamReader是字节流通向字符流的桥梁
OutputStreamWriter 是字符流通向字节流的桥梁
是什么意思啊?
转换流用来干嘛的啊?
作者: w270307032    时间: 2013-5-29 12:19
要回答这个问题,首先就得知道字符流和字节流间的关系:
1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串
2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
3.字符流是将字节流读到的数据先去查了下指定的 charset(也就是我们经常说的编码表),去码表找对应的关系,转化成字符数据。
你可以这样简单地理解     字符流=字节流+码表信息
转换流,简单说就是用来2种流间互相转换用的
“ InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 ”
这句话的意思可以这么理解:InputStreamReader 可以将字节流转化成对应的字符流(通过你指定的码表,不指定则为默认)
也就是通过InputStreamReader处理后的字节流出来后就成了字符流了,如以下操作:InputStreamReader isr=new ( InputStreamReader(InputStream in) )
in是字节流,但是isr就是字符流了。
OutputStreamWriter,就不说了,和InputStreamReader刚好相反。

作者: SOAR    时间: 2013-5-29 12:22
很典型的一个应用就是从控制台数据了。
io包里唯一一个可以从控制台读数据的方法就是System.in 的read方法,但是这个方法读进去的是字节流,而你现在偏偏需要一个字符流,你该怎么办?这时你就需要转换流了。它充当着中介的角色。
作者: 刘勇强    时间: 2013-5-29 15:41
其实你仔细看一下InputStream 和InputStreamReader的方法定义就能很清楚看出来

InputStream 字节流,类中定义的方法都是操作字节(读字节)
InputStreamReader类的构造方法中接受一个 InputStream,就好比把InputStream包了一下,生成了字符流InputStreamReader类的对象,InputStreamReader类中的方法便可以操作字符

把一个字节流对象转化成了一个字符流的对象  不就是桥梁么
作者: 蔚蓝天色    时间: 2013-10-3 22:23
感谢.....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2