網絡傳輸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);