【发布时间】:2017-08-24 10:58:33
【问题描述】:
我在 Netflix Hollow 库代码 (https://github.com/Netflix/hollow) 上方查看了一下,发现这个函数我找不到任何意义(警告:我对 Java 不太了解)。 理论上,该函数从 InputStream 中返回一个变长整数。
/**
* Read a variable length integer from the supplied InputStream
*/
public static int readVInt(InputStream in) throws IOException {
byte b = (byte)in.read();
if(b == (byte) 0x80)
throw new RuntimeException("Attempting to read null value as int");
int value = b & 0x7F;
while ((b & 0x80) != 0) {
b = (byte)in.read();
value <<= 7;
value |= (b & 0x7F);
}
return value;
}
我评论我的疑问:
1) Int value = b & 0x7F : 结果总是b,对吧?有什么意义?
2) while ((b & 0x80) != 0) : b & 0x80 的结果(如果b为整数,即编码为从0到9的十进制,十进制是48-57)总是0。因此,永远不会进入循环......
【问题讨论】:
-
你好,托尼!关键点在这里:
if b is an integer digit, coded in decimal...——不是。b这里用作纯byte,用于存储接收到的位。查看我的答案以获得更详细的解释。
标签: java utf-8 stream bit-manipulation inputstream