java - java中的可变字节数组

标签 java arrays bytebuffer

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

(整数)(字节[])

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

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/

相关文章:

java - 无法在控制台上打印 api 响应

c - 在 C 中如何获取指向 char 字符串的指针数组中的项数

arrays - 将数组数组转换为哈希数组

PHP - 如何将查询结果放入数组中?

java - 使用 ByteBuffer 将 long 转换为 "unsigned, 4 byte integer in network byte order"

java - 无法解决 BufferOverflow 异常 - Java

java - 如何使用Java将字符串和二进制文字发送到服务器

java - 替代已弃用的 javax.servlet.http.HttpUtils.parseQueryString?

java - 避免instanceof - 不可修改的类

java - Socket getOutputStream 耗时太长