黑马程序员技术交流社区

标题: 奇怪的OutputStreamWriter [打印本页]

作者: 孙茜茜    时间: 2013-6-27 14:32
标题: 奇怪的OutputStreamWriter
本帖最后由 孙百鑫 于 2013-7-1 07:49 编辑

api里说(老师也说) OutputStreamWriter是把字符流转成字节流,但这句话的意思看着怎么这么像反过来的????等号左边是带缓冲的字符流输出,右边根源关联文件的是字节流输出,中间的OutputStreamWriter难道不是把字节流变字符流吗,思路都反了啊!!!
  1. BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out,txt")));
复制代码

作者: 贾永长    时间: 2013-6-27 14:48
  1. <p>BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out,txt"))); </p>
复制代码
API中:很详细啊,将 OutputStreamWriter 包装到 BufferedWriter 中

API.jpg (166.71 KB, 下载次数: 0)

API.jpg

作者: 孙茜茜    时间: 2013-6-27 15:16
贾永长 发表于 2013-6-27 14:48
API中:很详细啊,将 OutputStreamWriter 包装到 BufferedWriter 中

就是对这句话的理解我是反的,不懂
作者: 刘渝灵    时间: 2013-6-27 16:32
是的,我当初也是有这种疑问。其实就是说这一句得到的bufw是一个字符流对象,貌似是最里边的FileOutputStream字节流对象被包装了?字节流变成了字符流,api说的却是是字符流通向字节流的桥梁?
我是这样看的,字符流的底层是字节流,这一句代码是把FileOutputStream字节流对象传递给了字符流,字符流会以这个字节流作为底层字节流的基础,大概包装成一个缓冲的字节流,这个字符流把数据解码后,最终还是写到了new FileOutputStream("out,txt")中。
其实,这种疑问如果能去看看OutputStreamWriter的源码应该比较有帮助。可惜了,我通常看不懂源码, 看来看去头就大了。
作者: 280270738    时间: 2013-6-27 20:18
OutpurStreamWriter他本来就是一个字符流。
作者: 刘凯    时间: 2013-6-27 20:42
其实这个转换流 很多情况是为了实现编码的转换  后边你学到编码的时候或许会明白一点,  如果还没学到的话 现在不太好说, 起码我是这么认为的
作者: 万琪    时间: 2013-6-28 00:59
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out,txt")));^o^

buf 容器 里加入了  什么材料呢??

txt是字符流,,,再转换,,懂吗
作者: 神之梦    时间: 2013-6-28 01:12
转换流的主要作用是在编码上,但对于楼主的疑问,也还是可以解释的:
Writer out= new BufferedWriter(new OutputStreamWriter(System.out));
一开始我也非常想不懂怎么会是字符流向字节呢?但从结果来思考,似乎可以理解一些,如上面的代码
我们知道System.out是标准的输出流,对应的是控制台,而控制台接收的是字节数据,当我们想把文本中的内容显示在控制台时,因为文本中的内容一般是字符数据,所以我利用OutputStreamWriter转换流,来把字符数据输出为字节数据。
这跟键盘录入也算同理了,我想楼主对于键盘录入的字节转向字符应该好理解一些吧。
而楼主的代码:
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out,txt")));
因为输出的是一个文件,也就是说写入一个文件中,这时,我们可以理解为,把一些字符数据,转换为字节数据存入一个文件中。
对于缓冲区,只是一个临时存储的容器而已。
个人理解。。。。。。。。。
作者: 孙茜茜    时间: 2013-6-28 10:37
神之梦 发表于 2013-6-28 01:12
转换流的主要作用是在编码上,但对于楼主的疑问,也还是可以解释的:
Writer out= new BufferedWriter(new ...

这么解释比之前明白点了,版主请改已解决吧
作者: 神之梦    时间: 2013-6-28 13:48
孙茜茜 发表于 2013-6-28 10:37
这么解释比之前明白点了,版主请改已解决吧

自个改吧,我是云5的版主,对于21版表示无能为力{:soso_e110:}
作者: 刘勇强    时间: 2013-6-29 20:57
同意8楼

InputStreamReader()比较好理解 ,可以借助这个理解OutputStreamWriter();

InputStreamReader()是读字节 字节转换成字符.
OutputStreamWriter() 是写字符 『write(char)   write(char[] arr) 两个方法』,然后把写的字符转为字节 输出到目的地,比如System.out   这样看,不就是从字符到字节的桥梁么!

我看第一遍视频的时候还以为老师口误,后来发现api也是这么写的  才发现了这个问题.   


作者: 孙百鑫    时间: 2013-7-1 07:49
孙茜茜 发表于 2013-6-28 10:37
这么解释比之前明白点了,版主请改已解决吧

改成已解决联系版主qq。




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