A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 攻城狮 黑马帝   /  2012-5-10 00:23  /  1496 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李南江 于 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;
        }
}

4 个回复

倒序浏览
  if(count==0){                        
                        count = in.read(by);
                        if(count<0)//一直读不懂这里什么情况count会小于0,感觉应该只能等于0
                        {
                                return -1;
                        }
       count代表返回存入数组的个数,调用了底层的读入动作,并不是装饰类自己的读的动作,而是父类的read
当一个文件读到结束时,操作系统会有一个标记,当读到这个标记时,就不在读了,返回当前读取的个数,
下次循环时,直接返回系统的结束标记,这个通过JVM返回的就是-1。所以是小于0。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 谢谢 看了一天晕了··我休息去了.

查看全部评分

回复 使用道具 举报
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;
                }
回复 使用道具 举报
已经解决 请无视此贴··看了一天视频 估计脑袋有点晕了 想错了···read方法独到末尾返回-1~~所有count等于-1 我真的晕了·
回复 使用道具 举报
read
public int read()从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。如果因为到达流末尾而没有可用的字节,则返回值 -1。
此 read 方法不会阻塞。


睡觉之···今天不适合再看了··谢谢大家热心帮忙 论坛就应该互助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马