[英]resize a byte array in android
我是android的新手。 我想在函数中调整字节数组的大小。 有可能吗? 如有任何问题,请提出解决方案。
public void myfunction(){
byte[] bytes = new byte[1024];
....................
.... do some operations........
................................
byte[] bytes = new byte[2024];
}
为了在不丢失内容的情况下实现调整字节数组大小的效果,已经提到了几种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
当然还有其他解决方案(例如,在循环中复制字节)。 关于效率, 请看这个
您无法在Java中调整数组大小。 您可以使用List来执行您想要的操作:
List<Byte> bytes = new ArrayList<Byte>();
另一种方法是使用System.arraycopy 。 在这种情况下,您将创建第二个数组并将第一个数组的内容复制到其中。
你不能这样做。 但是您可以创建一个新数组并使用System.arraycopy将旧内容复制到新内容。
你可以这样做:
bytes = new byte[2024];
但是您的旧内容将被丢弃。如果您还需要旧数据,则需要创建一个具有diff大小的新字节数组,并调用System.arrayCopy()
方法将数据从旧数据复制到新数据。
使用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 Collections教程 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.