java通过字节数组查看真实内容

java通过字节数组查看真实内容前言当我们打开debug模式时,经常能看到变量里有这么一坨

前言

当我们打开debug模式时,经常能看到变量里有这么一坨。

java通过字节数组查看真实内容

看着一脸懵逼,我们知道这是byte数组,java在通信时,都会将内容转换为二进制流来传输,二进制流在debug模式里最直观的体现就是byte数组。最小单位就是byte。

今天我们不通过程序去转换内容,而是通过计算器去算出真实的内容,主要目的还是理解存储的意义。

实验

字符串

定义一个字符串变量a=”123″,然后通过getBytes方法转换为字节数组。代码如下:

java通过字节数组查看真实内容

 转换后的字节输入如下:

java通过字节数组查看真实内容

可以看到字节数组长度为3,每个字符占用1byte。 

通过查看Unicode编码10进制可以知道,49代表1,50代表2,51代表3,

可以看出字符串的编码规则很简单,再看看字符串汉字,

java通过字节数组查看真实内容

转换后的字节如下:

java通过字节数组查看真实内容

可以看到每个汉字占用了3个字节,这个关系其实使用的是utf-8编码方式,具体编码规则参考这篇文章:https://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

比如前3个字节,-27、-68、-96。用计算器分别计算这三个数的二进制对应关系如下:

java通过字节数组查看真实内容

 再将这3个二进制按照顺序排列,对应十进制值为:

15056032

 通过在线编码转换如下:

java通过字节数组查看真实内容可以看到,最后计算出的结果和在线转换的是一样的。

整数

定义一个整型变量a=123,然后将a转化为byte数组

这里要说明一下,我们知道int是占用4个字节,所以转换为byte数组后会生成一个长度为4的数组。

java通过字节数组查看真实内容

java通过字节数组查看真实内容

这里要说明,截图中bytes为大端模式转换, 何为大端模式

大端模式与小端模式

  1. 大端模式是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中.
  2. 小端模式是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中

具体细节参考文章:java通过字节数组查看真实内容

java传输数据默认都采用大端模式

上边的123只需要1byte即可存储,我们换个大点的数

java通过字节数组查看真实内容

java通过字节数组查看真实内容

可以看到 跟123的效果不一样了。

我们先用计算机看下100110,对应的二进制是多少

java通过字节数组查看真实内容

 如上图,数据的低中高位已标出。

然后看下低位对应的10进制是多少。

java通过字节数组查看真实内容

可以看出,为14,再对比bytes数组截图

java通过字节数组查看真实内容

正好在内存的高地址中。与预期一致。顺带贴出转换方法代码:

    public static byte[] toHH(int n) {
        byte[] b = new byte[4];
        b[3] = (byte) (n & 0xff);
        b[2] = (byte) (n >> 8 & 0xff);
        b[1] = (byte) (n >> 16 & 0xff);
        b[0] = (byte) (n >> 24 & 0xff);
        return b;
    }

 总结

我们知道java有8大基本数据类型:byte(字节型)、short(短整型)、int (整型) 、long(长整型)、float(单精度浮点型)、double(双精度浮点型)、boolean(布尔型)、char(字符型)

他们分别占用的空间是,8位,16位,32位,64位,32位,64位,8位,16位。来张图更直观一点。

java通过字节数组查看真实内容

在传输数据过程中,占用1字节的无所谓,占用1个字节以上的数据类型存在大端、小端模式,需要与前端统一好。

这些知识,主要在做tcp传输,涉及byte或者bit层级协议时,会特别有用,可以关注一下。 

今天的文章java通过字节数组查看真实内容分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68662.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注