黑马程序员技术交流社区
标题:
为什么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