Я только что узнал о 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 пишет типы Char 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 конвертировать Float и Double типы в ByteBuffer, как результат выше?
спасибо, что заранее.
Это буфер BYTE. и диапазон байтов составляет от -128 до 127'. Поэтому он не может представлять '129' и будет переполняться до' -127'. –
P.S. они JVM ничего не конвертируют, это только байтовые значения этих типов. –