文章目录
- 前言
- 废话不多说,总结下今天的成果以及踩的坑
- 一、第一个坑【数据丢失】
- 二、第二个坑【byte集合无法转换byte数组】
- 三、第三个坑【Byte[]转byte[]】
- 四、第四个坑【16进制转byte】
- 总结
- 快一年没写博客了,貌似都不记得过去的自己了
- 向前看:前路漫漫亦灿灿
- 向后看:轻舟已过万重山
前言
周末,朋友约出去玩呢,但是也不能周周出去浪,学了一个月竹笛,也有点心累。本来准备休息一天的,给自己身体充个电。
结果前同事抱着他的硬件来找我研究电路了,哈哈,接着GG了。坐家里坐了一天软件,好端端的一个周末,结果搞了一天软硬件,身心疲惫【还好请我吃饭,不然我非呵呵他一脸】
没办法,贪财好色,喜新厌旧,俗人一个。有点点好处都会赴汤蹈火,哈哈哈
废话不多说,总结下今天的成果以及踩的坑
一、第一个坑【数据丢失】
EMQX给我发的消息,分了两段,以为是丢包了,但是看数据也不像,后来以为是需要黏包,但是个人能力有限,黏包代码写不出来,哈哈哈,还是太菜。问了下硬件客服售后工程师,说让改下超时时间就可以了。【还好没写,不然得哭晕在厕所】【方向不对,再努力也是白费】
然后果断可以了,真的很6,果然闻道有先后,术业有专攻。
【请教别人,并不是一种很丢人的事,不懂装懂才是】
二、第二个坑【byte集合无法转换byte数组】
一直以为,数组和集合,都可以随意转换的,结果怎么转都不对,什么Arrays.as,什么Stream,什么方法都用了还是不行,然后问了启蒙师傅
就给我回复了【toArray】6个字母,其中的道理自己去悟吧。果然大佬都是指点一二。不详细解说,查了之后发现,果然是可以转换的
【师傅领进门,修行靠个人】
废话不多说,上代码
Byte[] toArray = bytes.toArray(new Byte[0]);
三、第三个坑【Byte[]转byte[]】
这个比较简单,循环遍历就可以了,往里面一个一个塞即可
【最笨的方法,往往是最有效的方法】
Byte[] toArray = bytes.toArray(new Byte[0]);
byte[] littleByte = new byte[toArray.length];
for (int i = 0; i < toArray.length; i++) {
littleByte[i] = toArray[i];
}
四、第四个坑【16进制转byte】
这个费的时间最久,一直想问师傅,又不敢,一天不能总是问,程序猿要多动脑,就一直扣,一开始提示8C转换类型错误
Byte.parseByte
这个解析里面的数大于127,超出了byte的最大值
解决方法:因此我们需要使用下面的方法,先转成integer,然后byteValue()
byte a = Integer.valueOf("8C", 16).byteValue();
总结
一直感觉上学学的那8种基本类型没什么用,当真正用到的时候,真的很难受
现在理解了很多之前不懂的道理:
为什么计算机只认识0和1?
万物都是0和1,8个bit位即可以代表所有数字。00000001这就是计算机1了。00000010,这就是计算机的2
为什么硬件开发都用16进制?
16进制只需要两位,十进制的千位数万位数,都可以用两个字节诠释一切,通讯比较方便
8种基本数据类型,要常记于心。
或许最基础的才是最需要掌握的
1Byte=8bit