我正在尝试在Java中找到一个用于存储字节向量的类,它支持:随机访问(所以我可以在任何地方获取或设置一个字节),调整大小(所以我可以将内容附加到最后,或者手动更改大小),合理的效率(我可能在这些东西中存储兆字节的数据),都在内存中(我没有文件系统).有什么建议?
到目前为止候选人是:
> byte [].不可调整大小.
> java.util.Vector< Byte>.邪恶.也痛苦无效.
> java.io.ByteArrayOutputStream.不是随机访问.
> java.nio.ByteBuffer.不可调整大小.
> org.apache.commons.collections.primitives.ArrayByteList.不可调整大小.这很奇怪,因为它会自动调整大小,如果你添加东西,你就不能明确地改变大小!
> java.nio.channels.FileChannel的纯RAM实现.找不到一个. (记住我没有文件系统.)
> Apache Commons VFS和RAM文件系统.如果我必须,但我真的喜欢更重的东西……
这似乎是一个奇怪的遗漏,我相信我肯定错过了某个地方.我只想弄清楚什么.我错过了什么?
最佳答案
我会考虑一个包含大量byte []数组的类作为ArrayList或Vector的元素.
使每个块成为例如1024字节,因此您的访问器函数可以采用索引>> 10访问ArrayList的右边元素,然后索引& 0x3ff访问该数组的特定字节元素.
这将避免浪费将每个字节视为Byte对象,浪费在最后一个块末尾留下的任何东西.