如果你看了视频中,自定义的缓冲区,你就比较容易理解。缓冲区封装了read方法和一个数组。如果数组中有数据,就直接从数组中读取数据,如果没有数据,就从硬盘上将数据读到数组里。因为一次从硬盘上读一组数据,比读一个字节要快的多,所以提高了效率。
一下是自定义缓冲区代码,你可以参考一下:
- class MyBufferedInputStream
- {
- private InputStream in;
- private byte[] buf = new byte[1024];
- private int pos = 0,count = 0;
-
- MyBufferedInputStream(InputStream in)
- {
- this.in = in;
- }
- public int myRead()throws IOException
- {
- //缓冲区中没有数据,读入数据,并读出一个字节
- if(count==0)
- {
- count = in.read(buf); //内部封装read方法,读取硬盘数据
- if(count<0)
- return -1; //读到末尾,返回-1
- pos = 0;
- byte b = buf[pos];
- count--;
- pos++;
- return b&0xff; //取一个int数的后8位。
- }
- //缓冲区中有数据,读出数据
- else if(count>0)
- {
- byte b = buf[pos];
- count--;
- pos++;
- return b&0xff;
- }
- return -1;//为了编译通过
- }
- public void myClose()throws IOException
- {
- in.close();
- }
- }
复制代码 |