黑马程序员技术交流社区

标题: 自定义自解缓冲流 [打印本页]

作者: 黑马张旭    时间: 2013-1-30 16:23
标题: 自定义自解缓冲流
  1. import java.io.*;

  2. class MyBufferedInputStream
  3. {
  4.         private InputStream in;

  5.         private byte[] buf = new byte[1024*4];
  6.                
  7.         private int pos = 0,count = 0;
  8.        
  9.         MyBufferedInputStream(InputStream in)
  10.         {
  11.                 this.in = in;
  12.         }

  13.         //一次读一个字节,从缓冲区(字节数组)获取。
  14.         public int myRead()throws IOException
  15.         {
  16.                 //通过in对象读取硬盘上数据,并存储buf中。
  17.                 if(count==0)
  18.                 {
  19.                         count = in.read(buf);
  20.                         if(count<0)
  21.                                 return -1;
  22.                         pos = 0;

  23. */  不是太理解这个为什么这个时候   这个数组装了 pos个
  24.                         byte b = buf[pos];


  25. // count 为什么要 自减下
  26.                         count--;
  27.                         pos++;
  28.                         return b&255;
  29.                 }
  30.                 else if(count>0)
  31.                 {
  32.                         byte b = buf[pos];

  33.                         count--;
  34.                         pos++;
  35.                         return b&0xff;
  36.                 }
  37.                 return -1;

  38.         }
  39.         public void myClose()throws IOException
  40.         {
  41.                 in.close();
  42.         }
  43. }


  44. /*
复制代码

作者: 王立浩    时间: 2013-1-30 17:28
额 pos是指针 不是你想的pos个,pos初始化为0,read方法
read(byte[] buf)
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 buf中。
返回的count值是这一次读的字节的数量,你取出一个字节,count就减一,直到把这次的读取的所有字节全部返回

还不懂的话,看看老师画的那个缓冲区的图就会明白了

作者: 王溢君    时间: 2013-1-30 17:33
数组一次装了count个,不是pos个!!!!pos是数组的角标,一次次的把数组从前到后读出来,
读一次,总数Count就记数减一个,方便减到0时再读入!
pos自加,遍历数组一般!!!
作者: 黑马张旭    时间: 2013-1-30 17:39
嗯 理解了 谢谢
作者: 黄成超    时间: 2013-1-30 17:40
count==0,之后,也就是重新开始读取数据,读取之后,因为存储在数组中缓冲区中,要从数组缓冲区,自然是从0下标开始取啦!所以就从这里就用用pos作为下标跟踪,buf[pos]s是第pos个,不是共有pos个哦!取出的时候也方便直接获取数组的长度,从而避免输出为空的情况。Count--是计数器的作用,每从缓冲区取出一个元素,就减1,这样子才能知道是否已经读取完了呀!





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