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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a3330682 中级黑马   /  2014-4-27 12:44  /  882 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 a3330682 于 2014-4-27 14:58 编辑

class MyBufferedInputStream
{
        private InputStream in;

        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);
                        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();
        }
为什么return b的时后要&255和0xff呢?
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

1 个回复

倒序浏览
防止字节数组中有255.例如:字节数组数据为[10,54,14,255,45,14].当读到255时,调用MyRead()会返回-1,提前结束对字节数组的读取。&255和0xff:二进制位:00000000 00000000 00000000 11111111,这个二进制跟字节数组里的255进行& 时,不会得到-1,是原数据:255

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马