黑马程序员技术交流社区

标题: 不懂就要问···《已经解决~我犯2了》 [打印本页]

作者: 攻城狮    时间: 2012-5-10 00:23
标题: 不懂就要问···《已经解决~我犯2了》
本帖最后由 李南江 于 2012-5-10 00:44 编辑

自定义字节流缓冲区~看了几遍了还是有一步不是很明白 求详解
class myBufferedInputStream{
        private InputStream in;
        private int pos = 0,count =0;
        private byte[] by = new byte[1024];
        myBufferedInputStream(InputStream in){
                this.in=in;
        }
        public int myRead() throws Exception{
               
                if(count==0){                        
                        count = in.read(by);
                        if(count<0)//一直读不懂这里什么情况count会小于0,感觉应该只能等于0
                        {
                                return -1;
                        }
                        pos=0;
                        byte b = by[pos];
                        count--;
                        pos++;
                        return b&255;
                }
                else if(count>0){
                        byte b = by[pos];
                        count--;
                        pos++;
                        return b&255;
                }
                return -1;
        }
}
作者: 何阳    时间: 2012-5-10 00:34
  if(count==0){                        
                        count = in.read(by);
                        if(count<0)//一直读不懂这里什么情况count会小于0,感觉应该只能等于0
                        {
                                return -1;
                        }
       count代表返回存入数组的个数,调用了底层的读入动作,并不是装饰类自己的读的动作,而是父类的read
当一个文件读到结束时,操作系统会有一个标记,当读到这个标记时,就不在读了,返回当前读取的个数,
下次循环时,直接返回系统的结束标记,这个通过JVM返回的就是-1。所以是小于0。


作者: 邱俊杰    时间: 2012-5-10 00:36
public int myRead() throws Exception{
               
                if(count==0){                        
                        count = in.read(by);//这里的count有个数了,不是0了,获取到了byte字节流,当小于0的时候表示数据取完了,
                        if(count<0)//一直读不懂这里什么情况count会小于0,感觉应该只能等于0
                        {
                                return -1;
                        }
                        pos=0;
                        byte b = by[pos];
                        count--;
                        pos++;
                        return b;
                }
作者: 攻城狮    时间: 2012-5-10 00:39
已经解决 请无视此贴··看了一天视频 估计脑袋有点晕了 想错了···read方法独到末尾返回-1~~所有count等于-1 我真的晕了·
作者: 攻城狮    时间: 2012-5-10 00:43
read
public int read()从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。如果因为到达流末尾而没有可用的字节,则返回值 -1。
此 read 方法不会阻塞。


睡觉之···今天不适合再看了··谢谢大家热心帮忙 论坛就应该互助




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