我正在读取一个具有以下结构的二进制文件:
(整数)(字节[])
该整数表示接下来的字节数组的大小。为了避免一直分配一个字节数组,我只是在下一次读取的大小大于上一次读取的大小时进行分配。
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;
}
祝你好运。
关于java - java中的可变字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31267587/