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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋旭东 中级黑马   /  2013-7-3 18:57  /  1352 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近在看毕老师的基础视频,疑惑点比较多,现在主要对BufferInputStream使用方面有点问题

FileInputStream fis = new FileInputStream("D:\\aa.txt");
   BufferedOutputStream bos = new BufferedOutputStream(
     new FileOutputStream("D:\\aa.txt"));
   byte[] b = new byte[1024];
   int len = fis.read(b);    --1
   while (len != -1) {
    bos.write(b);       --2
    len = fis.read(b);    --3
   }
   bos.flush();   --4
   bos.close();
   fis.close();

在1的位置从硬盘读1024个字节的存放到byte数组里面
在2的位置加入到BufferOutStream的缓存中     
在3的位置再继续读1024个字节信息到Byte数组里面
在4的位置把BufferOutStream的缓存中的数据刷到要保存的硬盘中

问题:1、是不是可以认为这个byte的数组是一个缓存区,用来存放读取出的数据和提供给输出缓存的数据
        2、如果可以的话,为什么还要用到BufferInputStream,这样写不是更简单吗

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

4 个回复

倒序浏览
这位兄弟我想问你,你有没有看论坛的规则,你有问题提问我们欣然接受,但是你这样做是不是觉得不是很好,一下子发那么多的帖子给人的感觉是有点动机不纯,希望你以后不要这么做,不然这让我们管理很难,一次发两到三个帖子是可以的,如果你的问题很多,希望你整理好,然后整理到一个帖子里面,这样别人解决问题也好,你看也好,问题度集中在一起,效果岂不是更好,希望你配合我们的工作,你的配合是我们带给我们最最大的鼓舞,谢谢。。。如果你急需要技术分论坛里面都有相关的活动,还有就是你积极回答问题(问题回答的要求全面和经典)度可以得到相应的技术分,还要就是请你好好看看这是什么版块的,你如果要发不是javaEE和SE还有就是物联云的你可以去对应的版块发帖子。再次希望你配合工作,将万分感谢。
回复 使用道具 举报
本帖最后由 郭东生 于 2013-7-4 01:31 编辑

1、可以认为这个byte的数组是一个缓存区,在此程序中应分析对应的读取和写入流操作的源和目的;

2、此程序中只是用到了 BufferedOutputStream  ,并未用到 BufferedInputStream  。用数组来缓存的思路没有问题

3、此程序整体来看并不合理,在循环内的write方法应该指定所读取的数组以及对应的长度(有数组不满的情况),需要循环操作的内容不明确;


回复 使用道具 举报
CPU读取速度过快,  你用字节数组当作缓冲区的话  如果数组中的内容不写出  那么第二次读取不会进行(如果进行 就会覆盖原先的数组内容)

而使用缓冲区的好处就是
当你第一次读取放入了缓冲区,就可以立刻进行第二次读取,不用管缓冲区的内容是否写出,尽管读就是了...



这就像我用箱子转运物品

我有一个箱子 只能装满一次箱子 然后转运清空后 再能装第二次

而多箱子  一个箱子装满 并不影响后面的继续装箱


也可以理解为单缓冲和多缓冲


对于b数组来说 它相对于BufferedOutputStream 来说 缓冲区太小  
b可以说就是一个箱子
而buff缓冲区 就是多个箱子
回复 使用道具 举报
Just_Only 发表于 2013-7-3 22:21
这位兄弟我想问你,你有没有看论坛的规则,你有问题提问我们欣然接受,但是你这样做是不是觉得不是很好,一 ...

谢谢您的建议,我怕一片博客里面有很多问题,别人看了就不想回答了,就一个一个问了。我都是积累几天的问题,找别的同学问耽误他们时间,我就在这里问了,毕竟都是自愿回答的。我在传智培训的,就是想学的扎实些。谢谢您的理解,我下次注意!:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马