как получить массив из ByteBuffer, но только до его позиции?

1

у меня есть

ByteBuffer buf = ByteBuffer.allocateDirect(500);

Затем я использую buf.put(byte) пару раз, скажем 20. Я сохраняю его в sql blob через базовый массив, то есть, вызывая buf.array(). Однако длина buf.array() равна 500. Как получить массив (byte []) длиной 20, который может быть передан другим (только для чтения) функциям? (без копирования, конечно.)

  • 0
    Вы хотите получить байтовый массив длиной 20 из байтового массива длиной 500 или из буфера с емкостью 500 или вам все равно, как?
  • 0
    Пофиг как. Просто хочу первые 20 байтов базового массива «buf» в виде байтового массива длиной 20. Поскольку в реальной жизни 20 больше похож на 200000, я бы предпочел не делать никаких копий.
Показать ещё 1 комментарий
Теги:
arrays
bytebuffer

1 ответ

3
Лучший ответ

попробуй это

ByteBuffer buf = ByteBuffer.allocate(500);
buf.putInt(1);
...
...
byte[] a = new byte[buf.position()];
buf.rewind();
buf.get(a);
  • 0
    Просто, чтобы убедиться, что я понимаю это, является ли "a" здесь просто видом исходного буфера? т. е. являются ли операции "new byte [buf.position ()]" и "buf.get (a)" операциями O (1) и копирование не выполняется?
  • 1
    это операция копирования, но другого решения нет
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню