黑马程序员技术交流社区

标题: 转换流 [打印本页]

作者: dunwu    时间: 2013-7-11 10:01
标题: 转换流
本帖最后由 杨兴庭 于 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
复制代码

作者: 下雨天    时间: 2013-7-11 11:00
这段代码好像有点问题,个人感觉应该是这样写:
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("d.txt"),"utf-8");
BufferedWriter bufw=new BufferedWriter(osw);
而且这是字节转字符,不是字符转字节,就是要传字节流对象
所以要用字符流缓冲区
作者: 神之梦    时间: 2013-7-11 12:52
read是读,InputStreamRead是字节转字符,所以传入的是字节,这个比较好理解。
write是写,OutputStreamWriter是字符转字节,因为写是将源数据写入目的数据,所以参数接收的是目的,相当于把字符数据写为字节数据,而字节数据就是这目的(只是个人的一种理解方式)。至于缓冲因为操作的是字符,所以用字符的缓冲
作者: 左手神刀    时间: 2013-7-11 16:53
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。用父类就解决问题了。再用子类就绕弯了。

个人理解 只限于交流。







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