高效的可扩展java字节数组,允许访问字节
有人知道一个Java类可以存储满足以下条件的字节吗高效的可扩展java字节数组,允许访问字节,java,arrays,bytebuffer,Java,Arrays,Bytebuffer,有人知道一个Java类可以存储满足以下条件的字节吗 有效地存储字节(即每字节不存储一个对象) 自动增长,如StringBuilder 允许对其所有字节进行索引访问(无需将所有内容复制到字节[]) 到目前为止,我所发现的任何东西都不能满足这些要求。具体而言: 字节[]:不满足2 ByteBuffer:不满足2 ByteArrayOutputStream:不满足3 ArrayList:不满足1(好吧,除非有特殊情况优化) 如果我能有效地从数组的开头删除字节,那就太好了 { ArrayList&l
StringBuilder
字节[]
)- 字节[]:不满足2
- ByteBuffer:不满足2
- ByteArrayOutputStream:不满足3
- ArrayList:不满足1(好吧,除非有特殊情况优化)
{ ArrayList<byte[256]> data; int startOffset; int size; }
{ArrayList data;int startOffset;int size;}
然后是显而易见的函数。这样的函数存在吗?最简单的方法是通过tearrayoutputstream将
子类化,并添加访问底层字节[]
的功能
根据您的要求,从开头删除字节的方式可以不同。如果您需要删除块,System.arrayCopy
应该可以正常工作,如果您需要删除单个字节,我会放置一个headIndex
来跟踪数据的开头(在“删除”足够的数据后执行阵列复制).你必须写一个。在我的脑海中,我要做的是在内部创建一个ArrayList,并将字节4存储到每个int,使用适当的函数屏蔽字节。对于删除和添加单个字节,性能将是次优。但是,如果这是一个真正的问题,它将以最小的大小存储对象操作中,为存储浪费的字节不超过3个(在ArrayList的开销之上)。最懒的方法将是ArrayList。它并不像您认为的那样效率低下,因为字节实例可以共享,也将共享,这意味着整个VM中只有256个字节的对象,除非您自己执行“new Byte()”某处。有一些用于高性能原语集合的实现,例如:
或者您可以使用byte[]
plusArrayUtils.add()
:或者ArrayByteList