操作字节数组的常用方法

·  阅读 584

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战

操作字节数组的常用方法

字节数组是什么,就是byte[]这种类型,一般的安卓开发者对字节接触的比较少,操作字节并不像操作字符串那么方便。本篇文章的目的,是为了记录常用操作字节的方法。

System.arrayCopy

官方是这样描述的


public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

代码解释:

  Object src : 原数组

int srcPos : 从元数据的起始位置开始

  Object dest : 目标数组

  int destPos : 目标数组的开始起始位置

  int length : 要copy的数组的长度

复制代码

这个方法在操作字节数组中经常用到。用上面的方法举几个例子。

  • 克隆新的数组

// 新数组

byte[] srcBytes = new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

// 目标数组

byte[] destBytes = new byte[5];

// 截取

System.arraycopy(srcBytes, 1, destBytes, 0, 5);

Log.d("===","Arrays.toString(destBytes):"+Arrays.toString(destBytes));

// 输出:[2, 3, 4, 5, 6]

复制代码
  • 比较两个数组是否相同

/**

* 两个byte[]是否相同

*

* @param data1

* @param data2

* @return

*/

public static boolean arrayEquals(byte[] data1, byte[] data2) {

return Arrays.equals(data1, data2);

}

复制代码
  • 截取数组,像截取String一样

/**

* 截取byte[]

*

* @param data

* @param position

* @param length

* @return

*/

public static byte[] subArray(byte[] data, int position, int length) {

byte[] temp = new byte[length];

System.arraycopy(data, position, temp, 0, length);

return temp;

}

复制代码
  • 合并两个数组

/**

* 拼接byte[] 和 byte[]

*

* @param bytes1

* @param bytes2

* @return

*/

public static byte[] byteMerger(byte[] bytes1, byte[] bytes2) {

byte[] bytes3 = new byte[bytes1.length + bytes2.length];

System.arraycopy(bytes1, 0, bytes3, 0, bytes1.length);

System.arraycopy(bytes2, 0, bytes3, bytes1.length, bytes2.length);

return bytes3;

}

复制代码

可变数组

在创建数组的时候,必须要指定数组的长度,但有时候不确定数组有多少长,所以这种场景下就不方便去处理,有没有像List这样的类,或者像操作字符串的StringBuffer这种方法呢?

使用 ByteArrayOutputStream

new ByteArrayOutputStream()之后,就可以方便的进行写入了。


byte[] srcBytes = new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

try {

ByteArrayOutputStream stream = new ByteArrayOutputStream();

stream.write(srcBytes);

Log.d("===", "stream.toByteArray():" + Arrays.toString(stream.toByteArray()));

} catch (IOException e) {

e.printStackTrace();

}

// 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

复制代码

如果再高级一些,也可以自己设计可边长度的字节数组,大家可以参考这篇文章

分类:
Android
标签:
收藏成功!
已添加到「」, 点击更改