我正在读取具有以下结构的二进制文件:
(整数)(字节[])
整数表示下一个字节数组的大小。为了避免一直分配一个字节数组,我只在下一次读取的大小大于最后一次读取的大小时进行分配。
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;
}
祝好运。