我正在声明一个字节数组,由于它不断更新,我的大小未知,所以如何声明无限大小/可变大小的字节数组?
Ste*_*ker 11
你不能声明一个无限大小的数组,因为这需要无限的内存.此外,所有分配调用都处理数字,而不是无限数量.
您可以分配一个按需调整大小的字节缓冲区.我相信最简单的选择是ByteArrayOutputStream.
ByteBuffer有一个API,可以更容易地操作缓冲区,但你必须自己构建调整大小功能.最简单的方法是分配一个新的,更大的数组,复制旧内容,并交换旧缓冲区.
其他答案提到List<Byte>了某种使用.值得注意的是,如果创建一堆new Byte()对象,则可以大大增加内存消耗. Byte.valueOf回避这个问题,但你必须确保在整个代码中始终如一地使用它.如果你打算在很多地方使用这个列表,我可能会考虑编写一个简单的List装饰器来实现所有元素.例如:
public class InterningList extends AbstractList<Byte>
{
...
@Override
public boolean add(Byte b) {
return super.add(Byte.valueOf(b));
}
...
}
Run Code Online (Sandbox Code Playgroud)
这不是一个完整的(甚至是经过测试的)示例,只是一些开始......
Java中的数组不是动态的.您可以改用列表.
List<Byte> list = new ArrayList<Byte>();
Run Code Online (Sandbox Code Playgroud)
由于自动装箱功能,您可以自由地将字节对象或原始字节添加到此列表中.
小智 5
要定义可变长度的字节数组,只需使用 apachecommons.io.IOUtils库,而不是像这样分配手动长度
byte[] b=new byte[50];
Run Code Online (Sandbox Code Playgroud)
您可以将输入流传递给IOUtils函数,该函数将对此输入流执行读取功能,因此字节数组将具有所需的确切字节长度。前任。
byte[] b = IOUtils.toByteArray(inpustream);
Run Code Online (Sandbox Code Playgroud)
混乱..
| 归档时间: |
|
| 查看次数: |
35767 次 |
| 最近记录: |