網絡傳輸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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章