0x7f 有什么特别之处?

What's so special about 0x7f?

我正在阅读 avro 格式规范并试图了解其实现。下面是解码long value的方法:

  @Override
  public long readLong() throws IOException {
    ensureBounds(10);
    int b = buf[pos++] & 0xff;
    int n = b & 0x7f;
    long l;
    if (b > 0x7f) {
      b = buf[pos++] & 0xff;
      n ^= (b & 0x7f) << 7;
      if (b > 0x7f) {
        b = buf[pos++] & 0xff;
        n ^= (b & 0x7f) << 14;
        if (b > 0x7f) {
          b = buf[pos++] & 0xff;
          n ^= (b & 0x7f) << 21;
          if (b > 0x7f) {
            // only the low 28 bits can be set, so this won't carry
            // the sign bit to the long
            l = innerLongDecode((long)n);
          } else {
            l = n;
          }
        } else {
          l = n;
        }
      } else {
        l = n;
      }
    } else {
      l = n;
    }
    if (pos > limit) {
      throw new EOFException();
    }
    return (l >>> 1) ^ -(l & 1); // back to two's-complement
  }

问题是为什么我们总是检查 0x7f 是否小于我们刚刚读取的字节?

这是一种位压缩形式,其中每个 byte 的最高有效位用于确定是否应读取另一个 byte。从本质上讲,这允许您以比通常需要的更少的字节数对值进行编码。但是,需要注意的是,如果数量很大,则需要的字节数将超过 正常。因此,这在处理小值时是成功的。

回答你的问题,0x7F 是二进制的 0111_1111。可以看到最高位作为标志位。

它是 0b1111111 (127),无符号 btye 可能的最大数字,为标志节省一个。