【问题标题】:resize a byte array in android在android中调整字节数组的大小
【发布时间】:2012-05-15 06:14:44
【问题描述】:

我是安卓新手。我想在函数中调整字节数组的大小。有没有可能。如果有任何问题,请提出解决方案。

public void myfunction(){
    byte[] bytes = new byte[1024];
    ....................
    .... do some operations........
    ................................
    byte[] bytes = new byte[2024];
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    为了达到在不丢失内容的情况下调整字节数组大小的效果,Java中已经提到了几种解决方案:

    1) ArrayList<Byte>(见 a.ch. 和 kgiannakakis 的答案)

    2) System.arraycopy()(参见 jimpic、kgiannakakis 和 UVM 的答案)

    类似:

    byte[] bytes = new byte[1024];
    //
    // Do some operations with array bytes
    //
    byte[] bytes2 = new byte[2024];
    System.arraycopy(bytes,0,bytes2,0,bytes.length);
    //
    // Do some further operations with array bytes2 which contains
    // the same first 1024 bytes as array bytes
    

    3)我想添加第三种我认为最优雅的方式:Arrays.copyOfRange()

    byte[] bytes = new byte[1024];
    //
    // Do some operations with array bytes
    //
    bytes = Arrays.copyOfRange(bytes,0,2024);
    //
    // Do some further operations with array bytes whose first 1024 bytes
    // didn't change and whose remaining bytes are padded with 0
    

    当然还有其他解决方案(例如,在循环中复制字节)。关于效率,see this

    【讨论】:

      【解决方案2】:

      您不能在 Java 中调整数组的大小。你可以使用List 来做你想做的事:

      List<Byte> bytes = new ArrayList<Byte>();
      

      另一种方法是使用System.arraycopy。在这种情况下,您将创建第二个数组并将第一个数组的内容复制到其中。

      【讨论】:

        【解决方案3】:

        你可以这样做:

        bytes = new byte[2024];
        

        但是您的旧内容将被丢弃。如果您还需要旧数据,则需要创建一个具有差异大小的新字节数组并调用System.arrayCopy()方法将数据从旧数据复制到新数据。

        【讨论】:

          【解决方案4】:

          你不能那样做。但是您可以创建一个新数组并使用 System.arraycopy 将旧内容复制到新数组中。

          【讨论】:

            【解决方案5】:

            改用ArrayList&lt;Byte&gt;,Java 数组不允许调整大小,ArrayLists 可以,但让它有点不同。你不能指定它们的大小(实际上你不需要 - 它是自动完成的),你可以指定初始容量(如果你知道 ArrayList 包含多少元素,这是一个很好的做法):

            byte myByte = 0;
            ArrayList<Byte> bytes = new ArrayList<Byte>(); //size is 0
            ArrayList<Byte> bytes2 = new ArrayList<Byte>(1024); //initial capacity specified
            bytes.add(myByte); //size is 1
            ...
            

            我建议你看看这个Java Collections tutorial

            【讨论】:

              猜你喜欢
              • 2022-01-22
              • 2011-12-17
              • 1970-01-01
              • 2019-03-23
              • 2013-05-01
              • 2013-02-08
              • 1970-01-01
              • 2010-10-07
              • 2012-10-06
              相关资源
              最近更新 更多