2014-02-18 6 views
0

В то время как ByteBuffer.put(ByteBuffer) способ есть, ByteBuffer.get(ByteBuffer), похоже, отсутствует? Как я могу достичь чтения меньше ByteBuffer от большего ByteBuffer?Как я могу прочитать меньший ByteBuffer из более крупного ByteBuffer?

+1

Какие байты из буфера вы хотите прочитать? Что значит читать 'ByteBuffer' из' ByteBuffer'? –

+0

Если бы я должен был передать байт [], стандартный массив байтов заданного размера, ByteBuffer.get (byte), массив будет заполнен. Я хочу подражать этой функции с ByteBuffers. –

ответ

1

Там существует ByteBuffer#put метод:

общественного ByteBuffer поставил (ByteBuffer ЦСИ): Этот метод передает байты, оставшиеся в данном буфере источника в этот буфер

You что-то вроде

общественного ByteBuffer получить (ByteBuffer ДСТ): Этот метод передает байты, оставшиеся в этом буфере в данном целевого буфер

Но считает, что операции get и put несколько симметричны.

ByteBuffer src = ... 
ByteBuffer dst = ... 
//src.get(dst); // Does not exist 
dst.put(src); // Use this instead 

Вы явно говорили о меньше и больше буферов. Поэтому я предполагаю, что буфер dst меньше, чем буфер src. В этом случае можно просто установить ограничение исходного буфера соответственно:

ByteBuffer src = ... 
ByteBuffer dst = ... 
int oldLimit = src.limit(); 
src.limit(src.position()+dst.remaining()); 
dst.put(src); 
src.limit(oldLimit); 

Альтернативные препараты возможны (например, с использованием ByteBuffer#slice() исходного буфера). Но в любом случае вы делаете не должны скопировать содержимое буфера в новый массив байтов, чтобы перенести его в другой буфер!

0

Если я правильно понимаю, вам просто нужно заново обернуть byte[] в новом ByteBuffer.

ByteByffer buffer = ...; 
byte[] sub = new byte[someSize]; 
buffer.get(sub [, ..]); // use appropriate get(..) method 
buffer = ByteBuffer.wrap(sub); 
Смежные вопросы