以下代码(这是一个简化版本)用于在 jdk1.6 中运行良好,现在断言在 jdk 1.7 下失败。
ByteBuffer buffer = ...;
buffer.mark();
char c = (char) buffer.get();
buffer.reset();
switch(c) {
...
case 'H':
byte b = buffer.get();
//Here I get -106 for b and 72 for (byte) c
assert( b == ((byte) c) );
break;
...
}
我阅读了oracle 的兼容性页面,但没有找到任何可以解释的内容。也许是 utf8 的 5 和 6 形式,但我不认为是这样。这也可能是我仍在调查的竞争条件,但我认为询问 stackoverflow 不会有什么坏处:-)