我正在声明一个字节数组,它的大小对我来说是未知的,因为它不断更新,那么我如何声明无限大小/可变大小的字节数组?
最佳答案
您不能声明无限大的数组,因为那样需要无限大的内存。此外,所有分配调用都处理数字,而不是无限数量。
您可以分配一个按需调整大小的字节缓冲区。我相信最简单的选择是 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));
}
...
}
这不是一个完整的(甚至是经过测试的)示例,只是一些开始......
关于java - 如何在 Java 中声明无限大小/动态的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13554302/