Почему ByteBuffer.getFloat возвращает 0.0? - PullRequest
1 голос
/ 18 января 2012

ByteBuffer byteBuffer принимается по соединению TCP / IP, отображается в эмуляторе NetBeans и содержит 0x2b, 0x69, 0x80 и 0x3f в байтах 4, 5, 6 и 7 для этого разрыва. Если порядковый номер задан неверно, я бы ожидал либо неправильное значение с плавающей запятой, либо, возможно, какой-то тип числового исключения, но не всегда 0,0 для различных наборов по 4 байта. То же самое происходит с рядом других чисел с плавающей запятой, считанных из этого ByteBuffer, с индексами 8, 12 и т. Д. Почему всегда следующее 0.0?

float f = byteBuffer.getFloat(4);

Ответы [ 2 ]

3 голосов
/ 18 января 2012

Невозможно воспроизвести:

import java.nio.ByteBuffer;

public class Test {

    public static void main(String[] args) {
        byte[] bytes = { 0x1, 0x1, 0x1, 0x1,  0x2b, 0x69, (byte) 0x80, 0x3f };
        ByteBuffer buffer = ByteBuffer.wrap(bytes);
        System.out.println(buffer.getFloat(4));
    }
}

Как прокомментировал AIX, я подозреваю, что ваш буфер на самом деле не содержит того, что вы думаете, он делает.

Что произойдет, если вы попробуете это с getInt(4)?

2 голосов
/ 18 января 2012

Я подозреваю, что вы не переворачиваете свой буфер после того, как прочитали, что означает, что вы читаете после того, что было записано в последний раз.

...