我是靠谱客的博主 娇气小刺猬,最近开发中收集的这篇文章主要介绍【Java】int 与 bytes 相关转换的两种方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用 java.nio.ByteBuffer 转换

private static byte[] intToByte(int intValue) {
    ByteBuffer byteBuf = ByteBuffer.allocate(4);
    byteBuf.putInt(intValue);
    return byteBuf.array();
}

private static int byteToInt(byte[] bytes) {
    ByteBuffer byteBuf = ByteBuffer.allocate(4);
    byteBuf.put(bytes);
    return byteBuf.getInt(0);
}

使用位运算转换

private static byte[] intToByte2(int intValue) {
    byte[] bytes = new byte[4];
    bytes[0] = (byte) (intValue >> 24);
    bytes[1] = (byte) (intValue >> 16);
    bytes[2] = (byte) (intValue >> 8);
    bytes[3] = (byte) (intValue);
    return bytes;
}

private static int byteToInt2(byte[] bytes) {
    return bytes[0] << 24 & 0xFF000000 |
            bytes[1] << 16 & 0x00FF0000 |
            bytes[2] << 8 & 0x0000FF00 |
            bytes[3] & 0x000000FF;
}

验证

public static void main(String[] args) {
    long start = System.currentTimeMillis();
    System.out.println("验证结果: " + verify());
    long end = System.currentTimeMillis();
    System.out.println("运行耗时: " + (end-start) + "ms");
}
private static boolean verify(){
    for (int i=Integer.MIN_VALUE; i<Integer.MAX_VALUE; i++){
        int b = byteToInt(intToByte(i));
        if(b != i){
            System.out.println("验证不通过的值为: " + i);
            return false;
        }
    }
   // 验证最大值
   int c = byteToInt(intToByte(Integer.MAX_VALUE));
   return c == Integer.MAX_VALUE;
}

第一种方式验证结果:
在这里插入图片描述

第二种方式验证结果:

int b = byteToInt2(intToByte2(i));

在这里插入图片描述

交叉验证结果:

int b = byteToInt2(intToByte(i));

在这里插入图片描述

int b = byteToInt(intToByte2(i));

在这里插入图片描述

应用场景

当网络传输的数据格式是字节流 且 字节流包含了多部分数据时,可以将各部分数据的长度作为前置内容。前置内容编码时需要 int 转 bytes;解码时需要 bytes 转 int。

总结

第一种实现方式算是常规的方式,没有什么变化性。第二种实现方式样式比较多。
本篇以记录为主,原理性的知识可阅读参考文章。
位运算的思路是:int 转 bytes 拆分字节;bytes 转 int 组合字节。
基本知识点:字节数组低位在前;int 转 byte 截取低八位;0xFF 用来清零。


参考资料:
ByteBuffer原理:https://blog.csdn.net/mrliuzhao/article/details/89453082
位运算原理:http://blog.csdn.net/tang9140/article/details/43404385

最后

以上就是娇气小刺猬为你收集整理的【Java】int 与 bytes 相关转换的两种方式的全部内容,希望文章能够帮你解决【Java】int 与 bytes 相关转换的两种方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部