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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清心玉质 中级黑马   /  2013-8-9 17:32  /  1884 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

OutputStreamWriter是字符流通向字节流的桥梁,意思不就是说把字符流转成字节流吗?而OutputStreamWriter却是字符流,为什么???

评分

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

查看全部评分

11 个回复

倒序浏览
楼主你好
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。
在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
对于InputStreamReader  它是字节流通向字符流的桥梁。为什么这么说呢?因为这是一个读取流,也就是说从文件中读取数据,
通俗的理解可认为,数据在硬盘上是以字节形式存储,但是读取出来后就成了字符串,这样就可理解为字节流通向字符流的桥梁。
而 OutputStreamWriter 字符流通向字节流的桥梁;因为这是一个写入流,将我们从键盘上输入的字符串写入到一个文件中,
但是字符串最终是以字节存储,所以说是字符流通向字节流的桥梁。
希望可以帮到你


评分

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

查看全部评分

回复 使用道具 举报
它是操作字符流的,所以是字符流,它的write方法中以字节的形式存储的
回复 使用道具 举报
OutputStreamWriter 是字符流通向字节流的桥梁
InputStreamReader 是字节流通向字符流的桥梁:
你的意思是不是 OutputStream 和 InputStream都是字节流    writer和reader是字符流  上面的桥梁的两个类的名字都是组合的,
前面都是字节流 后面的都是字符流  你感觉应该都是字节流转向字符流的桥梁,但是OutputStreamWriter确实字符流的子类,是把
我感觉只是和命名的规则有关,名字上可以看出和字符流和字节流有关系,只是功能的不同,和命名有关的。
希望对你有帮助!
回复 使用道具 举报
1.在计算机中,任何数据都是以字节形式存在的,你应该知道,CPU是计算机中的中央处理器,任何数据和程序都是经过CPU去调度处理的,而CPU只能处理二进制数据,所以在计算机中任何数据都是字节形式存在的,一个字节等于8个二进制位(也就是老师上课说的,电信号,开是1,关是0)。
2.解码的问题: 其实当我们打开一个记事本的时候,你看到的的确是你想看到的一些数据,比如中文字符等,其实这并不是我们直接写入就已经是字符了,其实这一系类的字节数据,只是为了将这些字节数据表现出我们能看得懂的信息,所以记事本这个软件在你打开的时候,进行解码操作,将这些字节数据按照系统平台默认的字符编码进行查表,2个字节对应码表上一个字符(至少中文系统GBK码表是这样的),将对应的字符显示出来了而已。
3.对于InputStreamReader  它是字节流通向字符流的桥梁,每次调用 InputStreamReader 中的一个 read() 方法都会从基础输入流读取一个或多个字节,注意是字节(因为我们在计算机中存储的文件本身就都是一字节形式存储的),因为我们知道它是转换流,读取到之后,会自动按照平台默认字符编码将其解码转换成字符,这样你就的到的是字符了,你去查API你可以知道,这个类的构造方法可以指定一个Charset,也就是字符码表,这是我的理解,呵呵。
4.OutputStreamWriter 字符流通向字节流的桥梁,每次调用 write() 方法都会针对给定的字符码表将字符转换成字节,不指定的话,就是平台默认的喔,因为我们知道在字符码表上1个字符会对应2个字节码嘛,反过来也是一样,所以读取到之后,会自动按照平台默认字符编码将其编码转换成字节了,这样写到文件中又成了字节了。
5.至于你说的为什么这两个类要划分到字符流那边的话,应该就是一种命名分类约定吧,可能只是为便于管理吧,因为毕竟后面是Reader和Writer结尾都是字符流嘛,至于这个,你不用太过于纠结,哈哈,明白原理和用法就好了。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 清心玉质 于 2013-8-12 09:48 编辑

呃,我大概理解了你们的意思,但是我问的最后一句话不是说分类,而是说OutputStreamWriter输出的是字符流,在视频里就说了是字符流,还用了字符流的方法。感脚你们说的OutputStreamWriter输出的是字节流,我又晕了。。。OutputStreamWriter输出的到底是字符还是字节流。如果是字符流,为什么说是通向字节的桥梁?如果是字节流,为什么可以用字符流的方法?
回复 使用道具 举报
forward 发表于 2013-8-11 23:06
OutputStreamWriter 是字符流通向字节流的桥梁
InputStreamReader 是字节流通向字符流的桥梁:
你的意思是 ...

呃,我大概理解了你们的意思,但是我问的最后一句话不是说分类,而是说OutputStreamWriter输出的是字符流,在视频里就说了是字符流,还用了字符流的方法。感脚你们说的OutputStreamWriter输出的是字节流,我又晕了。。。OutputStreamWriter输出的到底是字符还是字节流。如果是字符流,为什么说是通向字节的桥梁?如果是字节流,为什么可以用字符流的方法?
回复 使用道具 举报
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作
回复 使用道具 举报
杨璐敏 发表于 2013-8-13 22:22
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~

亲,问题还没有弄明白哦~~
回复 使用道具 举报
在软件这个行业里,不是每个问题都有确切的答案的,因为这是规定,究竟为什么必须这样做,老师说:你只要知道这样做对就行了,理解不了就记住它。
回复 使用道具 举报
巩建 发表于 2013-8-16 09:36
在软件这个行业里,不是每个问题都有确切的答案的,因为这是规定,究竟为什么必须这样做,老师说:你只要知 ...

貌似比较靠谱~~
回复 使用道具 举报
巩建 发表于 2013-8-16 09:36
在软件这个行业里,不是每个问题都有确切的答案的,因为这是规定,究竟为什么必须这样做,老师说:你只要知 ...

不是每个都是马云,但每个人可以成为马云。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马