高效的可扩展java字节数组,允许访问字节

高效的可扩展java字节数组,允许访问字节,java,arrays,bytebuffer,Java,Arrays,Bytebuffer,有人知道一个Java类可以存储满足以下条件的字节吗 有效地存储字节(即每字节不存储一个对象) 自动增长,如StringBuilder 允许对其所有字节进行索引访问(无需将所有内容复制到字节[]) 到目前为止,我所发现的任何东西都不能满足这些要求。具体而言: 字节[]:不满足2 ByteBuffer:不满足2 ByteArrayOutputStream:不满足3 ArrayList:不满足1(好吧,除非有特殊情况优化) 如果我能有效地从数组的开头删除字节,那就太好了 { ArrayList&l

有人知道一个Java类可以存储满足以下条件的字节吗

  • 有效地存储字节(即每字节不存储一个对象)
  • 自动增长,如
    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[]
    plus
    ArrayUtils.add()
    :或者
    ArrayByteList