我刚刚了解了 Java 的 ByteBuffer,我对 JVM 如何将多种数据类型存储到 ByteBuffer 中有些困惑。这是代码:
public static void main(String[] args) {
ByteBuffer BF1 = ByteBuffer.allocate(30);
BF1.putChar('A');
BF1.putChar('B');
BF1.putInt(129);
BF1.putDouble(0.98);
BF1.putFloat(8.9f);
byte[] BA1 = new byte[BF1.position()];
BF1.position(0);
BF1.get(BA1, 0, BA1.length);
System.out.print("BA1 =");
for(byte a: BA1)
System.out.print(" " + a);
}
/*output
BA1 = 0 65 0 66 0 0 0 -127 63 -17 92 40 -11 -62 -113 92 65 14 102 102 **/
我知道 JVM 将 Char 类型写入 2 个字节,int 类型写入 4 个字节,double 类型写入 8 个字节,Float 类型写入 4 个字节。因此,ByteBuffer 中的输入值应该是:
A = 0 65, B = 0 66, 192 = 0 0 0 -127, 0.98 = 63 -17 92 40 -11 -62 -113 92, 8.9f = 65 14 102 102
我的问题:
JVM如何将int 129转换为0 0 0 -127,为什么不写成0 0 0 129?那么JVM如何像上面的结果一样转换ByteBuffer中的Float和Double类型?
非常感谢您提前。