我想以下列方式使用java nio ByteBuffer的put方法:
ByteBuffer small = ByteBuffer.allocate(SMALL_AMOUNT_OF_BYTES);
ByteBuffer big = getAllData();
while (big.hasRemaining()){
small.put(big);
send(small);
}
put方法会抛出缓冲区溢出异常,所以我要解决的是:
ByteBuffer small = ByteBuffer.allocate(SMALL_AMOUNT_OF_BYTES);
ByteBuffer big = getAllData();
while (big.hasRemaining()){
while (small.hasRemaining() && big.hasRemaining()){
small.put(big.get());
}
send(small);
}
我的问题是 - 是否有更好的方法可以这样做,或者至少是一种有效的方式来做我想要的事情?
答案 0 :(得分:5)
好吧,您可以实际调用hasRemaining()
来确定剩余的字节数,而不是使用布尔值remaining()
。
然后你可以使用一个小的固定大小的中间字节数组和基于数组的get()
和put()
方法来传输字节的“块”,调整放入中间字节的字节数缓冲区基于剩余空间量。