我正在读取具有以下结构的二进制文件:

(整数)(字节[])

整数表示下一个字节数组的大小。为了避免一直分配一个字节数组,我只在下一次读取的大小大于最后一次读取的大小时进行分配。

int sz = rawBuffer.getInt();
if (sz > lSz){  //lSz is a class variable
   buffer = new byte[sz];
   lSz = sz;
}
rawBuffer.get(buffer, 0, sz);


问题在于缓冲区始终具有最大大小。如果读取大小为5的字节数组和大小为3的字节数组,则buffer.length将为5。

无论如何,是否有必要调整缓冲区的大小而无需重新分配?或者拥有另一个保持数组有效大小的结构更好,例如ByteBuffer。

最佳答案

我认为没有重新分配过程就不会有一种方法来调整缓冲区的大小。因此,如果缓冲区的大小对您至关重要,则可以尝试更改

if (sz > lSz){  //lSz is a class variable
   buffer = new byte[sz];
   lSz = sz;
}




if (sz != lSz){
   buffer = new byte[sz];
   lSz = sz;
}


祝好运。

07-24 09:21