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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dunwu 中级黑马   /  2013-7-11 10:01  /  1193 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-12 21:51 编辑
  1. OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"utf-8");
  2.         //OutputStreamWriter这不是字符转字节吗?为什么传递的是字节流对象?
  3.         BufferedWriter bufw = new BufferedWriter(osw);
  4.         //而且缓冲区使用的是BufferedWriter而不是BufferedOutputStream
复制代码

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

3 个回复

倒序浏览
这段代码好像有点问题,个人感觉应该是这样写:
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("d.txt"),"utf-8");
BufferedWriter bufw=new BufferedWriter(osw);
而且这是字节转字符,不是字符转字节,就是要传字节流对象
所以要用字符流缓冲区

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
read是读,InputStreamRead是字节转字符,所以传入的是字节,这个比较好理解。
write是写,OutputStreamWriter是字符转字节,因为写是将源数据写入目的数据,所以参数接收的是目的,相当于把字符数据写为字节数据,而字节数据就是这目的(只是个人的一种理解方式)。至于缓冲因为操作的是字符,所以用字符的缓冲

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
01.OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"utf-8");
02.        //OutputStreamWriter这不是字符转字节吗?为什么传递的是字节流对象?
03.        BufferedWriter bufw = new BufferedWriter(osw);
04.        //而且缓冲区使用的是BufferedWriter而不是BufferedOutputStream
d.txt 是要把数据写入到磁盘的文件名称。在磁盘上写当然得用字节流对象。
为了高效所以在读书数据的时候都把数据读到读取字符缓冲区,要把读取字符缓冲区中的数据写到磁盘上,需要先把读取字符缓冲区中的数据放到写入流字符缓冲区(BufferedWriter)。
把数据写到磁盘上还需要把字符转换成字节所以就用到了字符转字节的流,就是OutputStreamWriter,把字符转换成字节了,就要需要字节流来接收那就是new FileOutputStream()来接收,它接收完了就要把数据写到磁盘上,可是写到哪个文件呢?于是就需要把文件名作为参数传递给他,这个文件就d.txt.
BufferedOutputStream继承自FileOutputStream。用父类就解决问题了。再用子类就绕弯了。

个人理解 只限于交流。


评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马