Java ByteBuffer“put”方法 - 防止缓冲区溢出

时间:2012-05-16 11:31:05

标签: java networking nio bytebuffer

我想以下列方式使用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);
 }

我的问题是 - 是否有更好的方法可以这样做,或者至少是一种有效的方式来做我想要的事情?

1 个答案:

答案 0 :(得分:5)

好吧,您可以实际调用hasRemaining()来确定剩余的字节数,而不是使用布尔值remaining()

然后你可以使用一个小的固定大小的中间字节数组和基于数组的get()put()方法来传输字节的“块”,调整放入中间字节的字节数缓冲区基于剩余空间量。