代码如下:
/** Reads an int stored in variable-length format.  Reads between one and
   * five bytes.  Smaller values take fewer bytes.  Negative numbers are not
   * supported.
public int readVInt() throws IOException {
    byte b = readByte();
    int i = b & 0x7F;
    for (int shift = 7; (b & 0x80) != 0; shift += 7) {
      b = readByte();
      i |= (b & 0x7F) << shift;
    }
    return i;
  }英文说明的意思好像是读出一个整数,然后读取一到五字节范围,(因为有可能这个数很大)
我做了个试验输入21,
最后返回是85,不知道这个函数的功能有什么意义,可能中间计算有错
我自己的运算步骤如下:
b=21,10101
b&0x7F:0010101 (和全1相与有什么用呢?)
(b&0x7F)<<7:1000000
再和i或:1010101=(85)

解决方案 »

  1.   

    依我看这个方法的作用就是将一串7位的无符号整数(0-127).不断的累计起来。知道读到负数为止。
    byte b = readByte();                                    //这一句读取第一个byte,此时读出的是8位
    int i = b & 0x7F;                                       //这里只取低7位
    for (int shift = 7; (b & 0x80) != 0; shift += 7) {      //这里循环读下一个byte,知道读出的为负数。
       b = readByte();                                      //这里是读的动作
       i |= (b & 0x7F) < < shift;                           //这里把后读到的byte取低7位,放到刚读到的7位的前面

    return i;