簡體   English   中英

如何從較大的ByteBuffer中讀取較小的ByteBuffer?

[英]How can I read a smaller ByteBuffer from a larger ByteBuffer?

雖然存在ByteBuffer.put(ByteBuffer)方法,但ByteBuffer.get(ByteBuffer)似乎丟失了? 我怎么實現讀取一個較小ByteBuffer從更大ByteBuffer

考慮閱讀ByteBufferAPI頁面

ByteBuffer get(byte[])

ByteBuffer get(byte[] dst, int offset, int length)

存在ByteBuffer#put方法:

public ByteBuffer put(ByteBuffer src) :此方法將給定源緩沖區中剩余的字節傳輸到此緩沖區

你正在尋找類似的東西

public ByteBuffer get(ByteBuffer dst) :此方法將此緩沖區中剩余的字節傳輸到給定的目標緩沖區

但是考慮到操作getput有點對稱。

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() )。 但在任何情況下,你不必緩沖區的內容復制到一個新的字節數組只是把它轉移到另一個緩沖區!

如果我理解正確,你只需要在新的ByteBuffer重新包裝byte[]

ByteByffer buffer = ...;
byte[] sub = new byte[someSize];
buffer.get(sub [, ..]); // use appropriate get(..) method
buffer = ByteBuffer.wrap(sub);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM