黑马程序员技术交流社区

标题: BufferedWriter的一个小问题!!!!谢谢。 [打印本页]

作者: 胡斌    时间: 2012-12-22 21:45
标题: BufferedWriter的一个小问题!!!!谢谢。
BufferedWriter b = new BufferedWriter(new OutputStreamWriter(System.out));
OutputStreamWriter是把字符流转换为字节流,个人感觉缓冲应该使用:BufferedOutputStream这个缓冲器吧?为什么??????

作者: 翁鹏    时间: 2012-12-22 22:07
本帖最后由 翁鹏 于 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));
这难道能成功???

作者: hanyahui    时间: 2012-12-22 22:12
因为你这个是写(显示),所以要用字符流,如果用字节流 写出来的东西你看得懂吗???
作者: 曹睿翔    时间: 2012-12-22 22:13
本帖最后由 曹睿翔 于 2012-12-22 22:15 编辑

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

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

OnputStreamWrite,大哥你搞反了!!!!字符转字符!!!!!!
作者: hanyahui    时间: 2012-12-22 22:24
胡斌 发表于 2012-12-22 22:14
缓冲!!!!!!!!!!!!!!!!
至于看的看不懂,还另有语句。这只是个缓冲,和输出没有直接关系 ...

哦,没理解清
作者: 曹睿翔    时间: 2012-12-22 23:53
胡斌 发表于 2012-12-22 22:22
OnputStreamWrite,大哥你搞反了!!!!字符转字符!!!!!!

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

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

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

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

作者: 焦健    时间: 2012-12-23 00:41
好像是因为使用字符流进行处理数据要比字节流块吧,字符流工作效率比字节流高,而且我们一般进行数据处理的时候都是以文件的方式,打印到工作台的操作很少,所以在处理文件的时候用字符流提高效率,需要用到部分字节流的时候用转换流转换为字节流即可。
作者: 奋斗的青春    时间: 2012-12-23 01:35
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-23 05:23
曹睿翔 发表于 2012-12-22 23:53
不好意思,弄错了,我又想了想画个图
你看看对不对

应该是哪错了,被版主加了一个技术分又撤消了,汗啊




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