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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙茜茜 中级黑马   /  2013-6-27 14:32  /  1570 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-7-1 07:49 编辑

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

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

11 个回复

倒序浏览

回帖奖励 +10

  1. <p>BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out,txt"))); </p>
复制代码
API中:很详细啊,将 OutputStreamWriter 包装到 BufferedWriter 中

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

API.jpg

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报
贾永长 发表于 2013-6-27 14:48
API中:很详细啊,将 OutputStreamWriter 包装到 BufferedWriter 中

就是对这句话的理解我是反的,不懂
回复 使用道具 举报

回帖奖励 +10

是的,我当初也是有这种疑问。其实就是说这一句得到的bufw是一个字符流对象,貌似是最里边的FileOutputStream字节流对象被包装了?字节流变成了字符流,api说的却是是字符流通向字节流的桥梁?
我是这样看的,字符流的底层是字节流,这一句代码是把FileOutputStream字节流对象传递给了字符流,字符流会以这个字节流作为底层字节流的基础,大概包装成一个缓冲的字节流,这个字符流把数据解码后,最终还是写到了new FileOutputStream("out,txt")中。
其实,这种疑问如果能去看看OutputStreamWriter的源码应该比较有帮助。可惜了,我通常看不懂源码, 看来看去头就大了。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

回复 使用道具 举报

回帖奖励 +10

OutpurStreamWriter他本来就是一个字符流。
回复 使用道具 举报

回帖奖励 +10

其实这个转换流 很多情况是为了实现编码的转换  后边你学到编码的时候或许会明白一点,  如果还没学到的话 现在不太好说, 起码我是这么认为的
回复 使用道具 举报
万琪 金牌黑马 2013-6-28 00:59:38
7#

回帖奖励 +10

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out,txt")));^o^

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

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

这么解释比之前明白点了,版主请改已解决吧
回复 使用道具 举报
孙茜茜 发表于 2013-6-28 10:37
这么解释比之前明白点了,版主请改已解决吧

自个改吧,我是云5的版主,对于21版表示无能为力{:soso_e110:}
回复 使用道具 举报
同意8楼

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

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

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

回复 使用道具 举报
孙茜茜 发表于 2013-6-28 10:37
这么解释比之前明白点了,版主请改已解决吧

改成已解决联系版主qq。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马