网络传输Byte数组

网络传输Byte数组

案例背景

需要将byte数组,以Json的方式传输,Json默认会将Byte数组转化成String作为key的value。我们也可以自己将Byte数组转化为String在放入Json键值对里。在接手端再从Json中解析出Byte数组。

但是项目中的问题是:传过来的Byte数组还原不了。接收端解析得到的Byte数组的长度和发送端的原始Byte数组的长度都不一样。

Byte数组转String

byte[] 和String可以随意转换

但是当byte数组理有负值的时候就会出现问题,如下代码所示

byte[] bytes = {1,-1,1,-1,1};
String rec = new String(bytes);
byte[] byter = rec.getBytes();

通过debug发现

这里写图片描述

测试发现只要是byte数组中出现负值,将byte数组转换成String后,再由String转换回byte数组所有的负值都会转换成-17,-65,-67三个byte。这个具体原因我还在研究中。

解决办法

最简单的就是用base64对byte数组进行编码,进过编码后得到String传输到对端解码得出byte数组。

String str = Base64.encodeBase64String(bytes);
byte[] byteres = Base64.decodeBase64(str);

你可能感兴趣的:(编程基础,实践总结)