看了些博客,基本有3种方法可以实现这需求,不过只要效率不是相差太大,会使用一种就够了,条条大路通罗马。这里选择借助java.nio.ByteBuffer来实现这个转换,因为只要将byte[]转换为ByteBuffer就可以实现所有primitive类型的数据读取。
参考代码如下:
public class TestMain {
//分配缓冲区,单位为字节,long类型占8字节,所以设置为8
private static ByteBuffer buffer = ByteBuffer.allocate(8);
//long类型转byte[]
public static byte[] longToBytes(long x) {
buffer.putLong(0, x);
return buffer.array();
}
//byte[]转long类型
public static long bytesToLong(byte[] bytes) {
buffer.put(bytes, 0, bytes.length);
//flip方法将Buffer从写模式切换到读模式,调用flip()方法会将position设回0,从头读起
buffer.flip();
return buffer.getLong();
}
//测试代码
public static void main(String[] args) throws Exception {
long test = 100;
byte[] bytes = TestMain.longToBytes(test);//输出结果:[B@67117f44
System.out.println(bytes);
long test2 = TestMain.bytesToLong(bytes);
System.out.println(test2);//输出结果:100
}
}