本帖最后由 李大强 于 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();
}
}
这个程序效率到底高在哪里了呢?真是不明白!
|