次のコード (これは単純化されたバージョンです) は、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;
...
}
オラクルの互換性ページを読みましたが、それを説明するものは何も見つかりませんでした。utf8 の 5 および 6 形式かもしれませんが、そうではないと思います。まだ調査中の競合状態である可能性もありますが、stackoverflowに問い合わせても問題ないと思いました:-)