3

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

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

5 回答 5

8

为了达到在不丢失内容的情况下调整字节数组大小的效果,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

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

于 2014-04-09T07:19:27.507 回答
4

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

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

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

于 2012-05-15T06:21:18.160 回答
2

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

于 2012-05-15T06:21:15.023 回答
2

你可以这样做:

bytes = new byte[2024];

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

于 2012-05-15T06:22:50.580 回答
1

ArrayList<Byte>相反,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 集合教程

于 2012-05-15T06:20:30.973 回答