【问题标题】:Infinite ByteBuffer in JavaJava中的无限字节缓冲区
【发布时间】:2010-07-27 13:00:18
【问题描述】:

我正在开发一个程序,我正在压缩大量信息并将其以字节的形式存储在缓冲区中。我不能使用ByteBuffer,因为我不知道最终尺寸。

什么是更好的实现方式?

【问题讨论】:

    标签: java buffer bytebuffer


    【解决方案1】:

    ByteArrayOutputStream 怎么样?当然,它并不完全方便,但它会做你想做的事。当你收集完字节后,你可以弹出一个字节数组。

    【讨论】:

    • 对我来说很有意义,因为 Java 将压缩表示为输入/输出流。
    • 这个方法有 2GB 的限制(只是为了澄清)
    • 当你调用 ByteArrayOutputStream#toByteArray 流时调用 Arrays.copyOf 这可能会导致 OutOfMemoryError
    【解决方案2】:

    您应该将大量信息存储在文件或数据库中,而不是内存中。迟早你会耗尽内存。

    【讨论】:

      【解决方案3】:

      您可以使用 Apache MINA IOBuffer,但它的大小调整算法相当昂贵。

      我所做的是使用直接字节缓冲区,您不需要确切知道它有多大,因为未使用的空间会消耗虚拟内存,而不是堆甚至主内存。在 64 位机器上,虚拟内存非常便宜。

      你知道最终的尺寸不会比原来的大很多。

      【讨论】:

        猜你喜欢
        • 2014-07-12
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多