黑马程序员技术交流社区

标题: 为什么BufferedInputStream效率如此之低? [打印本页]

作者: 李大强    时间: 2013-2-8 18:07
标题: 为什么BufferedInputStream效率如此之低?
本帖最后由 李大强 于 2013-2-12 10:32 编辑

BufferedInputStream 到底是怎样对InputStream进行缓冲的呢?老师讲的替代方法(视频第19天14)好像根本就是多余,它只不过是
又调用了底层的InputStream而已,根本没有自己的独特之处啊!但运行起来怎么比BufferedInputStream还要快(只需十几毫秒,而API
上的需要500多毫秒),既然这样那么java工程师怎么不用老师的方法呢?
程序代码如下:

import java.io.*;

class MyBufferedInputStream//这是老师自定义的BufferedInputStream
{
        private InputStream in;//底层调用的其实还是InputStream而已!

        private byte[] buf = new byte[1024*4];
               
        private int pos = 0,count = 0;
        
        MyBufferedInputStream(InputStream in)
        {
                this.in = in;
        }

        
        public int myRead()throws IOException
        {
                //通过in对象读取硬盘上数据,并存储buf中。
                if(count==0)
                {
                        count = in.read(buf);//这里面调用的还是InputStream的方法,只不过是加了一个缓冲区而已
                                        //我就不信API上面的BufferedInputStream就没有这个缓冲区!
                        if(count<0)
                                return -1;
                        pos = 0;
                        byte b = buf[pos];

                        count--;
                        pos++;
                        return b&255;
                }
                else if(count>0)
                {
                        byte b = buf[pos];

                        count--;
                        pos++;
                        return b&0xff;
                }
                return -1;

        }
        public void myClose()throws IOException
        {
                in.close();
        }
}

这个程序效率到底高在哪里了呢?真是不明白!

作者: pzfpang449    时间: 2013-2-8 18:14
缓冲区就好像是一个容器一样,InputStream 没有这个容器,可就是,它读一个字节,outputstream 就写一个字节,

而,BufferedInputStream 不一样,它只要读到缓冲里面,就可以了,不用看是不是bufferedoutputStream读没读,  

就好像运水一样, 没有这个容器,你拿一杯水送过去,必须有人接过去(bufferedoutputstream)你才可以在回去,拿另一杯,
如果中间有,容易,你拿过去,直接倒到容器里面,再回去拿就OK了,

而BufferedReader  是每次操作一个字符,  bufferedinputstream,每次是操作一个字节,

就好像一个大杯子,和一个小杯子的区别。
希望对楼主有所帮助。
作者: 黑马-周建    时间: 2013-2-14 00:00
感觉,你们问的问题都很精彩,呵呵,看来我得加油了




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