【发布时间】:2010-07-27 13:00:18
【问题描述】:
我正在开发一个程序,我正在压缩大量信息并将其以字节的形式存储在缓冲区中。我不能使用ByteBuffer,因为我不知道最终尺寸。
什么是更好的实现方式?
【问题讨论】:
标签: java buffer bytebuffer
我正在开发一个程序,我正在压缩大量信息并将其以字节的形式存储在缓冲区中。我不能使用ByteBuffer,因为我不知道最终尺寸。
什么是更好的实现方式?
【问题讨论】:
标签: java buffer bytebuffer
ByteArrayOutputStream 怎么样?当然,它并不完全方便,但它会做你想做的事。当你收集完字节后,你可以弹出一个字节数组。
【讨论】:
ByteArrayOutputStream#toByteArray 流时调用 Arrays.copyOf 这可能会导致 OutOfMemoryError
您应该将大量信息存储在文件或数据库中,而不是内存中。迟早你会耗尽内存。
【讨论】:
您可以使用 Apache MINA IOBuffer,但它的大小调整算法相当昂贵。
我所做的是使用直接字节缓冲区,您不需要确切知道它有多大,因为未使用的空间会消耗虚拟内存,而不是堆甚至主内存。在 64 位机器上,虚拟内存非常便宜。
你知道最终的尺寸不会比原来的大很多。
【讨论】: