0
我剛剛瞭解了Java的ByteBuffer,我對JVM如何將多種數據類型存儲到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寫入字符類型作爲2個字節,整數類型作爲4個字節,雙類型作爲8個字節,和浮動類型作爲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類型?
非常感謝您提前。
它是一個「BYTE」緩衝區。字節範圍是'-128到127'。所以它不能代表'129'並且會溢出到'-127'。 –
P.S.他們JVM不會轉換任何東西,這些只是這些類型的字節值。 –