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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑昌奋 中级黑马   /  2013-3-17 14:13  /  2428 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字符流 往文件里面写数据的时候需要 刷新,而字节流为什么不用刷新也能 写到文件里面去呢?

点评

再次提醒: 如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,否则将扣除技术分,谢谢  发表于 2013-3-18 12:08
如果你的问题得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢!  发表于 2013-3-17 15:53

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

7 个回复

倒序浏览
因为字符流是包装了字节流,字符流首先把数据写到缓冲区里去了,所以要刷新。
回复 使用道具 举报
缓冲区!
字符流写入数据时,不是直接写入的,而是先按字节流写入缓冲区,再通过查找相应的编码表获取字符流数据,这些数据在flush()之前是在缓冲区的,必须刷新或者close()流才能将数据写入文件。
而字节流对文件的操作是直接的,没有经过缓冲区这块,所以不需要flush()刷新

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
如果你真的拷贝文件,例如txt文件
把他们存在内存中,然后再拷贝到另一个文件,
不要一边读取一个文件一边拷贝文件!切忌哦
回复 使用道具 举报
字符流底层其实用的就是字节流,字符流读取数据时因为使用了缓冲区,其实就是字符流在读取一个字符(两个字节)先存入缓冲区数组中,刷新后把数组中的数据写入到目标文件中
而字节流是没用缓冲区的,它是对字节直接进行操作的,读取一个字节写入一个字节,所以不用flush。
回复 使用道具 举报
字符流其实也是用的字节流来实现写数据的功能,只是字符流写数据时需要查编码表将字符编码字节。
字符流学数据步骤:
1.先将字符存放到缓冲区即内存中。
2.编码与写入到目标设备。
   2.1 普通字符流FileWriter在write时将内存中的字符解码为对应码表的字节。在flush时将编码后的字节写进目标设备中。
   2.2 缓冲字符流BufferedWriter在writer时并不实现解码功能,而是在flush时将内存中的字符解码为对应码表的字节再写入到目标设备中。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
谢洋 高级黑马 2013-3-17 15:38:11
7#
1、通过反射击发现字节流没有缓冲区,但都实现了Flushable接口,字符流底封装了字节流,
2、我想字节流有flush方法的原因是:当字符写入流调用flush方法是,该方法会调用其内封的字节流的flush方法,
   目的告诉底层字节流,把字符流XXX缓冲的内容写到文件中。
3、我想字符流算是字节流的一个包装类吧
回复 使用道具 举报
吴上波 发表于 2013-3-17 14:26
缓冲区!
字符流写入数据时,不是直接写入的,而是先按字节流写入缓冲区,再通过查找相应的编码表获取字符 ...

嗯,明白了!谢谢您
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马