在实践中经常会遇到两个btye数组合并成一个,或者多个byte数组合并成一个,以及int类型转byte数组,逆向的byte数组转int类型。
下面汇总了上述相关功能的方法,提供了对应的工具类,直接查看源码或更多的工具类可关注公众号“程序新视界”,回复“1005”获得。
下面是对应工具类的代码:
package com.choupangxia.bytes;
/**
* Byte相关公共处理工具
* <br/>
* 关注公众号:程序新视界;回复"1005"获得更多工具类
*
* @author sec
* @version 1.0
* @date 2020/12/22
**/
public class ByteUtil {
/**
* 合并两个字节数组到一个字节数组
*
* @param data1 字节数组1
* @param data2 字节数组2
* @return byte[] 合并后的字节数字
*/
public static byte[] mergeBytes(byte[] data1, byte[] data2) {
byte[] result = new byte[data1.length + data2.length];
System.arraycopy(data1, 0, result, 0, data1.length);
System.arraycopy(data2, 0, result, data1.length, data2.length);
return result;
}
/**
* 合并多个字节数组到一个字节数组
*
* @param values 动态字节数字参数
* @return byte[] 合并后的字节数字
*/
private static byte[] mergeBytes(byte[]... values) {
int lengthByte = 0;
for (byte[] value : values) {
lengthByte += value.length;
}
byte[] allBytes = new byte[lengthByte];
int countLength = 0;
for (byte[] b : values) {
System.arraycopy(b, 0, allBytes, countLength, b.length);
countLength += b.length;
}
return allBytes;
}
/**
* 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。
* 和bytesToInt()配套使用
*
* @param value 要转换的int值
* @return byte数组
*/
public static byte[] intToBytesLowAhead(int value) {
byte[] src = new byte[4];
src[3] = (byte) ((value >> 24) & 0xFF);
src[2] = (byte) ((value >> 16) & 0xFF);
src[1] = (byte) ((value >> 8) & 0xFF);
src[0] = (byte) (value & 0xFF);
return src;
}
/**
* 将int数值转换为占四个字节的byte数组,本方法适用于(高位在前,低位在后)的顺序。
* 和bytesToInt2()配套使用
*/
public static byte[] intToBytesHighAhead(int value) {
byte[] src = new byte[4];
src[0] = (byte) ((value >> 24) & 0xFF);
src[1] = (byte) ((value >> 16) & 0xFF);
src[2] = (byte) ((value >> 8) & 0xFF);
src[3] = (byte) (value & 0xFF);
return src;
}
/**
* byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序,和和intToBytes()配套使用
*
* @param src byte数组
* @param offset 从数组的第offset位开始
* @return int数值
*/
public static int bytesToIntLowAhead(byte[] src, int offset) {
return (src[offset] & 0xFF)
| ((src[offset + 1] & 0xFF) << 8)
| ((src[offset + 2] & 0xFF) << 16)
| ((src[offset + 3] & 0xFF) << 24);
}
/**
* byte数组中取int数值,本方法适用于(低位在后,高位在前)的顺序。和intToBytes2()配套使用
*/
public static int bytesToIntHighAhead(byte[] src, int offset) {
return ((src[offset] & 0xFF) << 24)
| ((src[offset + 1] & 0xFF) << 16)
| ((src[offset + 2] & 0xFF) << 8)
| (src[offset + 3] & 0xFF);
}
}