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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-3-17 21:21  /  2289 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

InputStream也有自己的读入数组的方法,而BufferedInputStream缓冲区它在创建的时候,会创建一个内部缓冲区数组,感觉没什么区别,不都是调用一个读入数组功能,都是缓冲啊

FileInputStream fis = new FileInputStream("1.gif");
                byte[] by = new byte[1024];
                int len = 0;
                while ((len = fis.read(by))!=-1)
                {
                        fos.write(by,0,len);
                }
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("1.gif"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy1.gif"));
                byte[] by = new byte[1024];
                int len =0;
                while ((len =bis.read(by))!=-1)
                {
                        //  bos.write(len);犯错
                        bos.write(by,0,len);
                }
                bis.close();
                bos.close();

5 个回复

倒序浏览
BufferedInputStream是套在某个其他的InputStream外,起着缓存的功能,

用来改善里面那个InputStream的性能(如果可能的话),

它自己不能脱离里面那个单独存在。FileInputStream是读取一个文件来作InputStream。

所以你可以把BufferedInputStream套在FileInputStream外,来改善FileInputStream的性能。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
InputStream 可以自定义缓冲区 byte[] by = new byte[1024];而里面的1024可以是整数倍,而BufferedInputStream里面的内置缓冲区最大一次读8192个字节,他是先将8192个字节一个个读到他的内置缓冲区,然后再一次性的将8192个字节给java虚拟机,因为这8192个是在内存中操作,所以会很快的,然后程序处理完后,再一次行写出8192个到内置缓冲区,再一个一个写出操作,这样速度会很快的

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
BufferedInputStream 是InputStream的一个子类,设计这个类是为了使我们的操作更为简便,这样我们就不用自己再去定义一个字节数组,可以减少我们的代码量,更为重要得是我们也能够通过BufferedInputStream的buf字段来设置这个数组的大小,这样是不是使用起来就更为方便了呢。别人已经为我们磨好了刀,为什么我们不直接拿来使用呢,还要自己去重新打造一次,那不是多此一举吗,我们现在都是站在巨人的肩膀上前进的,所以不要做这样费力、费时的事

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
有点抽象,慢慢消化看
回复 使用道具 举报
BufferedInputStream 是装饰类 加强InputStream 的功能
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马