gpt4 book ai didi

java - 有没有可能在 Java 7 (byte) ((char) ByteBuffer.get(X)) != ByteBuffer.get(X) 中?

转载 作者:行者123 更新时间:2023-11-29 05:43:41 26 4
gpt4 key购买 nike

以下代码(此为简化版)以前在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's compatibility page并没有找到任何可以解释它的东西。也许是 utf8 的 5 和 6 形式,但我认为情况并非如此。这也可能是我仍在调查的竞争条件,但我认为询问 stackoverflow 不会有什么坏处:-)

最佳答案

不,行为没有从 1.6 到 1.7 发生变化——或者就此而言,从 1.0 到 1.7。

当你执行这行代码时:

char c = (char) buffer.get();

您正在有效地执行这些步骤:

  1. 从缓冲区中获取一个byte
  2. 将该值转换为 int。负值以二进制补码形式表示。
  3. 将该整数转换为char。这将简单地屏蔽高阶两个字节,因此二进制补码整数将是一个“大”字符值。

在您的情况下,可能发生的情况是数据格式已更改,因此您不在预期的位置。查看其余代码,您正在阅读的“字符”似乎应该是简单的 ASCII 值。

关于java - 有没有可能在 Java 7 (byte) ((char) ByteBuffer.get(X)) != ByteBuffer.get(X) 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16590646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com