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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑飞 高级黑马   /  2014-8-18 10:27  /  2548 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑飞 于 2014-8-18 14:54 编辑

FielWriter 中的write(buf,0,len) 老毕视频中没用flush()刷新 这个write方法中封装了flush()吗?

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 神马都是浮云

查看全部评分

24 个回复

倒序浏览
flush()是缓冲区必用神器,不是说每个流必须用
回复 使用道具 举报
pengyu1801 发表于 2014-8-18 10:54
flush()是缓冲区必用神器,不是说每个流必须用

我就是想知道 FielWriter 中的write(buf,0,len)为什么不用刷新 是不是被封装在哪里了
FileWriter fw = null;
               
                FileReader fr = null;
               
                        fw = new FileWriter("beCopy.java");
                        fr = new FileReader("Copy1.java");
               
       

                char[] buf = new char[1024];
                int len = 0;
               
               
                while ((len = fr.read(buf))!=-1)
                {
                        fw.write(buf,0,len);
                }
                fr.close();
                fw.close();
回复 使用道具 举报
郑飞 发表于 2014-8-18 11:06
我就是想知道 FielWriter 中的write(buf,0,len)为什么不用刷新 是不是被封装在哪里了
FileWriter fw  ...

close()方法中自带有刷新功能,所以没写

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 赞一个!

查看全部评分

回复 使用道具 举报
pengyu1801 发表于 2014-8-18 12:46
close()方法中自带有刷新功能,所以没写

如果满意送我点黑马币
回复 使用道具 举报
pengyu1801 发表于 2014-8-18 12:47
如果满意送我点黑马币

while ((len = fr.read(buf))!=-1)
                {
                        fw.write(buf,0,len);
                }
                fr.close();
                fw.close();
我知道close的时候能自动刷新,但是你看这前面不是有while么 一直循环的 按道理不是应该每循环一次就是一个新的buf么 这么多次刷新应该不是最后这个close来完成的吧 哎 我想看源码去了 等下装个myeclipse好看源码
回复 使用道具 举报
close关闭的时候就附带刷新动作了,将数组刷新到文件中
回复 使用道具 举报
郑飞 高级黑马 2014-8-18 13:06:03
8#
思如涌泉 发表于 2014-8-18 12:58
close关闭的时候就附带刷新动作了,将数组刷新到文件中

每读写一次 不是buf就更新一次吗 读写那么多次 为什么只要最后一次刷新啊
回复 使用道具 举报
郑飞 发表于 2014-8-18 12:56
while ((len = fr.read(buf))!=-1)
                {
                        fw.write(buf,0,len);

前面循环的都缓存起来了

评分

参与人数 1黑马币 +5 收起 理由
郑飞 + 5 谢谢

查看全部评分

回复 使用道具 举报
学习了啊........
回复 使用道具 举报
pengyu1801 发表于 2014-8-18 13:29
前面循环的都缓存起来了

好吧 看来我是没弄清楚怎么存进去了 回头我再看看 谢了
回复 使用道具 举报
郑飞 发表于 2014-8-18 13:53
好吧 看来我是没弄清楚怎么存进去了 回头我再看看 谢了

前面循环的。。先相当于临时存到内存一样的容器里面。。。
close之前,全部写入硬盘。。。。
回复 使用道具 举报
烟海 发表于 2014-8-18 22:50
前面循环的。。先相当于临时存到内存一样的容器里面。。。
close之前,全部写入硬盘。。。。 ...

谢谢 我按这个思路再看看去
回复 使用道具 举报
liqi 中级黑马 2014-8-19 11:37:58
14#
学习了     
回复 使用道具 举报
楼主程序后面是不是用了close方法
回复 使用道具 举报
希冀 发表于 2014-8-27 12:21
楼主程序后面是不是用了close方法

这个搞明白了 是存到缓冲区了
回复 使用道具 举报
没有封装   后面没使用flush()     是因为结尾用close()了   它的作用是刷新内存 后释放资源   它包含了flush的作用
回复 使用道具 举报
本帖最后由 郑飞 于 2014-9-1 02:17 编辑
冷锋也温柔 发表于 2014-8-31 23:25
没有封装   后面没使用flush()     是因为结尾用close()了   它的作用是刷新内存 后释放资源   它包含 ...

之前看了下BufferedOutputStream中write方法 发现确实是自动刷新的 字符流的还没看 估计也是的 因为缓冲流要用两个数组传递数据的话 肯定不止只传第一次 所以最后的close是不够用的
回复 使用道具 举报
字都打错了
回复 使用道具 举报
郑飞 发表于 2014-8-18 12:56
while ((len = fr.read(buf))!=-1)
                {
                        fw.write(buf,0,len);

这个只是从文件中读出的buf,然后写到内存中,flush()是内存中写到硬盘中
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马