我正在阅读具有结构的二进制文件:
(整数)(字节[])
整数表示接下来的字节数组的大小。为了避免将所有时间分配给一个字节数组,我只是在下一次读取的大小大于最后一个时分配。
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。
答案 0 :(得分:1)
我认为如果没有重新分配的过程,就有办法调整缓冲区的大小。因此,如果缓冲区的大小对您很重要,您可以尝试更改
if (sz > lSz){ //lSz is a class variable
buffer = new byte[sz];
lSz = sz;
}
到
if (sz != lSz){
buffer = new byte[sz];
lSz = sz;
}
祝你好运。