A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hadexs 中级黑马   /  2013-5-29 11:20  /  1352 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

InputStreamReader是字节流通向字符流的桥梁
OutputStreamWriter 是字符流通向字节流的桥梁
是什么意思啊?
转换流用来干嘛的啊?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

4 个回复

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

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
很典型的一个应用就是从控制台数据了。
io包里唯一一个可以从控制台读数据的方法就是System.in 的read方法,但是这个方法读进去的是字节流,而你现在偏偏需要一个字符流,你该怎么办?这时你就需要转换流了。它充当着中介的角色。
回复 使用道具 举报
其实你仔细看一下InputStream 和InputStreamReader的方法定义就能很清楚看出来

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

把一个字节流对象转化成了一个字符流的对象  不就是桥梁么

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
感谢.....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马