java - 如何在 Java 中声明无限大小/动态的字节数组?

标签 java bytearray

我正在声明一个字节数组,它的大小对我来说是未知的,因为它不断更新,那么我如何声明无限大小/可变大小的字节数组?

最佳答案

您不能声明无限大的数组,因为那样需要无限大的内存。此外,所有分配调用都处理数字,而不是无限数量。

您可以分配一个按需调整大小的字节缓冲区。我相信最简单的选择是 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/

相关文章:

c# - 在 .NET 中将流(未知长度)转换为字节数组的最佳方法?

c# - 如何在 C# 和 Java 中生成相同的 MD5 哈希码?

asp.net - bytearray 到图像 asp.net

java - 在可变对象的 getter 中进行深度复制

java - JDBC 事务死锁 : solution required?

java - 为什么要执行父类的init block ?

javascript - 在 JavaScript 中将大整数转换为 8 字节数组

c# - C# 使用 AES 对 Java 加密/解密的奇怪行为

java - 如何检查数据库的 URL 是否有效?

actionscript-3 - 使用byteArray和Adobe Air生成x秒的静音音频文件