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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡斌 中级黑马   /  2012-12-22 21:45  /  2697 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

BufferedWriter b = new BufferedWriter(new OutputStreamWriter(System.out));
OutputStreamWriter是把字符流转换为字节流,个人感觉缓冲应该使用:BufferedOutputStream这个缓冲器吧?为什么??????

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

11 个回复

倒序浏览
本帖最后由 翁鹏 于 2012-12-22 22:39 编辑

BufferedOutputStream本来就是字节流啊,不用转换了啊!

BufferedWriter b = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedWriter 是字符流, 所以才需要OutputStreamWriter转换流 转换成字节流啊

一般OutputStreamWriter是完成 把 字符 编码 到硬盘。 即字符到字节


BufferedOutputStream本来就是字节流  OutputStreamWriter这个对象是完成字符流到字节流的转换啊


BufferedOutputStreamb = new BufferedOutputStream(new OutputStreamWriter(System.out));
这难道能成功???

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为你这个是写(显示),所以要用字符流,如果用字节流 写出来的东西你看得懂吗???
回复 使用道具 举报
本帖最后由 曹睿翔 于 2012-12-22 22:15 编辑

我是这样理解的,System.out(这是字节流),OnputStreamWriter(System.out)(这是把字节流转换为字符流),然后BufferedWriter(new OutputStreamWriter(System.out))(现在是字符流了,操作字符流当然用BufferWriter了,为的就是使用字符流的操作字符的方法,比如:String readLine();
欢迎拍砖
回复 使用道具 举报
hanyahui 发表于 2012-12-22 22:12
因为你这个是写(显示),所以要用字符流,如果用字节流 写出来的东西你看得懂吗??? ...

缓冲!!!!!!!!!!!!!!!!
至于看的看不懂,还另有语句。这只是个缓冲,和输出没有直接关系!!
回复 使用道具 举报
曹睿翔 发表于 2012-12-22 22:13
我是这样理解的,System.out(这是字节流),OnputStreamWriter(System.out)(这是把字节流转换为字符流),然后 ...

OnputStreamWrite,大哥你搞反了!!!!字符转字符!!!!!!
回复 使用道具 举报
胡斌 发表于 2012-12-22 22:14
缓冲!!!!!!!!!!!!!!!!
至于看的看不懂,还另有语句。这只是个缓冲,和输出没有直接关系 ...

哦,没理解清
回复 使用道具 举报
胡斌 发表于 2012-12-22 22:22
OnputStreamWrite,大哥你搞反了!!!!字符转字符!!!!!!

不好意思,弄错了,我又想了想画个图
你看看对不对
回复 使用道具 举报
臧盼 中级黑马 2012-12-23 00:33:02
9#
BufferedWriter b = new BufferedWriter(new OutputStreamWriter(System.out));
这个其实API里面已经写得很清楚了
OutputStreamWriter 是字符流通向字节流的桥梁:使用指定的 charset 将要向其写入的字符编码为字节。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。

每次调用 write() 方法都会针对给定的字符(或字符集)调用编码转换器。在写入基础输出流之前,得到的这些字节会在缓冲区累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递到此 write() 方法的字符是未缓冲的。

为了达到最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中以避免频繁调用转换器。例如:

Writer out = new BufferedWriter(new OutputStreamWriter(System.out));

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
焦健 高级黑马 2012-12-23 00:41:18
10#
好像是因为使用字符流进行处理数据要比字节流块吧,字符流工作效率比字节流高,而且我们一般进行数据处理的时候都是以文件的方式,打印到工作台的操作很少,所以在处理文件的时候用字符流提高效率,需要用到部分字节流的时候用转换流转换为字节流即可。
回复 使用道具 举报
api是这样解释的 :
An InputStreamReader is a bridge from byte streams to character streams: It reads bytes and decodes them into characters using a specified charset. The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted.
An OutputStreamWriter is a bridge from character streams to byte streams: Characters written to it are encoded into bytes using a specified charset. The charset that it uses may be specified by name or may be given explicitly, or the platform's default charset may be accepted.




回复 使用道具 举报
曹睿翔 发表于 2012-12-22 23:53
不好意思,弄错了,我又想了想画个图
你看看对不对

应该是哪错了,被版主加了一个技术分又撤消了,汗啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马