2017-02-21 2 views
0

Пробовать этот код: byte arr[] = ByteBuffer.allocate(2).putInt(1).array() Но он не работает с BufferOverflowException. 1 слишком большой для хранения в 2 байтах? Или моя проблема где-то в другом месте?Java (Android) - BufferOverflowException on putInt

ответ

3

1 слишком большой для хранения в 2 байтах?

Ну, int ... putInt всегда пишет 4 байта. Из documentation for ByteBuffer.putInt

Броски:

BufferOverflowException - Если есть меньше, чем четыре байта, оставшихся в этом буфере

Если вы хотите, чтобы положить два-байтовое целое, используйте putShort вместо этого. Если вы хотите хранить данные в кодировке с переменной шириной (где занимаемое пространство зависит от значения), вам, вероятно, потребуется написать код самостоятельно.

1

От Javadoc метода putInt:

записывает четыре байта, содержащих заданную Int значение, в текущем порядке байтов, в этот буфер в текущей позиции, а затем увеличивает положение с помощью четырех

Вы выделили только 2 байта поэтому BufferOverflowException:

Неконтролируемое исключение, возникающее при достижении относительной операцией до предела целевого буфера.

Вы можете решить expading до 4 байт буфера или с использованием putShort, которые используют только 2 байта для хранения количества 1.

1

ByteBuffer.putInt(1) помещает целое значение в буфер. Целое число составляет 4 байта (32 бит).

Смежные вопросы