我不谈框架,谈框架掉价
做项目时碰到需要在基本类型数据和字节数组相互转换的问题,但我查了基础类型的包装类,似乎没有可用的方法;使用 IO 流又不够装X,所以干脆搞个工具类,里面写些相互转换的方法,后续使用起来也比较方便。
工具类源码:
import java.io.*;
/**
* 此工具类用于字节数组和基本数据类型之间的互相转换
* java中储存数据的方式是大端字节序,高位字节在前,低位字节在后,这是人类读写数值的习惯方法。
* 以下所有的操作都是针对的大端字节序
*/
public class ByteArrayUtils {
//分析int转byte[]
public static byte[] testIntToByteArray(int value) {
//int占4个字节
byte[] bytes = new byte[4];
/**
* 使用>>位移运算符,并强转byte依次取得高位字节
* 由于是大端字节序,高位到低位是从左到右
* 例如 int num = 0x060A0B02,高位到低位依次是:06 -> 0A -> 0B -> 02
* 这个int类型变量的值的16进制为:06 0A 0B 02
*/
//右移24位后,返回值00 00 00 06,强转之后变成06
bytes[0] = (byte) (value >> 24);
//右移16位后,返回值00 00 06 0A,强转之后变成0A
bytes[1] = (byte) (value >> 16);
//右移16位后,返回值00 06 0A 0B,强转之后变成0B
bytes[2] = (byte) (value >> 8);
//06 0A 0B 02,强转之后变成02
bytes[3] = (byte) value;
return bytes;
}
//分析byte[]转int
public static int testByteArrayToInt(byte[] bytes) {
/**
* byte类型的数字要&0xFF再赋值给int类型,
* 其本质原因就是想保持二进制补码(负数用补码表示)的一致性
*/
int ff = 0xFF; //00 00 00 FF
//假设字节数组为 06 0A 0B 02
//左移24位之后,h0为06 00 00 00
int h0 = (bytes[0] & ff) << 24;
//左移16位之后,h1为00 0A 00 00
int h1 = (bytes[1] & ff) << 16;
//左移8位之后,h2为00 00 0B 00
int h2 = (bytes[2] & ff) << 8;
//h3为00 00 00 02
int h3 = bytes[3] & ff;
int value = h0 | h1 | h2 | h3;
return value;
}
/**
* short转byte[]
* @param value
* @return byte[]
*/
public static byt