java:bytes[]转long的三种方式

bytes[] 到数字类型的转换是个经常用到的代码,解决方式也不止一种,最近需要将bytes[]转为long,有机会深入了解了一下,此文做个总结。

java代码实现

如果不想借助任何已经有的类,完全可以自己实现这段代码,如下:

借助java.nio.ByteBuffer实现

java.nio.ByteBuffer 本身就有getLong,getInt,getFloat….方法,只要将byte[]转换为ByteBuffer就可以实现所有primitive类型的数据读取,参见javadoc。

 

借助java.io.DataInputStream实现

java.io.DataInputStream 同样提供了readLong,readLong,readLong….方法,只要将byte[]转换为DataInputStream就可以实现所有primitive类型的数据读取,参见javadoc。

完整测试代码

下面的Junit 测试代码计算String 的MD5校验码(16 bytes),然后使用上述方式分别将16 bytes转换为2个long(大端模式)然后以16进制模式输出结果,以验证三种方式一致性。

输出结果

md5 [39627933ceeebf2740e1f822921f5837]
l1=0x39627933ceeebf27 l2=0x40e1f822921f5837,DataInputStream
ln1=0x39627933ceeebf27 ln2=0x40e1f822921f5837,,ByteBuffer
ll1=0x39627933ceeebf27 ll2=0x40e1f822921f5837

参考资料

《Java 中 byte、byte 数组和 int、long 之间的转换》

 

from:https://blog.csdn.net/10km/article/details/77435659