黑马程序员技术交流社区

标题: 关于OutputStreamWriter的疑问 [打印本页]

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



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

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

呃,我大概理解了你们的意思,但是我问的最后一句话不是说分类,而是说OutputStreamWriter输出的是字符流,在视频里就说了是字符流,还用了字符流的方法。感脚你们说的OutputStreamWriter输出的是字节流,我又晕了。。。OutputStreamWriter输出的到底是字符还是字节流。如果是字符流,为什么说是通向字节的桥梁?如果是字节流,为什么可以用字符流的方法?
作者: 以防万一    时间: 2013-8-13 22:22
亲,如问题已解决请将分类的未解决改为已解决。

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


保持队形,谢谢合作
作者: 清心玉质    时间: 2013-8-16 09:15
杨璐敏 发表于 2013-8-13 22:22
亲,如问题已解决请将分类的未解决改为已解决。

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

亲,问题还没有弄明白哦~~
作者: 夜默    时间: 2013-8-16 09:36
在软件这个行业里,不是每个问题都有确切的答案的,因为这是规定,究竟为什么必须这样做,老师说:你只要知道这样做对就行了,理解不了就记住它。
作者: 清心玉质    时间: 2013-8-16 12:31
巩建 发表于 2013-8-16 09:36
在软件这个行业里,不是每个问题都有确切的答案的,因为这是规定,究竟为什么必须这样做,老师说:你只要知 ...

貌似比较靠谱~~
作者: 黄兴旺    时间: 2013-8-16 12:34
巩建 发表于 2013-8-16 09:36
在软件这个行业里,不是每个问题都有确切的答案的,因为这是规定,究竟为什么必须这样做,老师说:你只要知 ...

不是每个都是马云,但每个人可以成为马云。





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