此文僅解釋自己,工作遇到的json 和java bean對象轉換, 還有byte[]數組 轉對象的的一些疑惑.
HashMap<String,Object> map=Maps.newHashMap();
map.put(new String("88"), new Integer(1));
map.put(new String("nihao"), new Integer(12));
//object 轉 string
String jsonString=JSON.toJSONString(map);
System.out.println(jsonString);
//string 轉 java bean
HashMap<String, Object> beanMap=JSON.parseObject(jsonString, HashMap.class);
System.out.println(beanMap);
HashMap<String, Object> byteMap=(HashMap<String, Object>) map.clone();
byteMap.put(new String("byte"), new Long(87l));
//java bean 轉 byte數組.
byte[] mapByte=JSON.toJSONBytes(byteMap, SerializerFeature.SortField);
System.out.println(mapByte);
//byte[]數組 轉 java bean
HashMap<String, Object> MapByteToJavaBean=JSON.parseObject(mapByte,HashMap.class);
/*以上都不難
* 重點是 當byte[]數組轉成 string 的時候
* 怎麼辦
* 下面完完全全示範 從 java bean 到 byte[]數組 到 string
* 然後 傳輸最後的string, 在轉換成java bean
* */
//1 java bean
LinkedHashMap<Object, Object> linkedHashMap=Maps.newLinkedHashMap();
linkedHashMap.put(UUID.randomUUID().toString(), new ObjectId());
linkedHashMap.put(UUID.randomUUID().toString(), new ObjectId());
linkedHashMap.put(UUID.randomUUID().toString(), new ObjectId());
linkedHashMap.put(UUID.randomUUID().toString(), new ObjectId());
System.out.println(JSON.toJSONString(linkedHashMap));
//2. java bean - byte[]數組
byte[] MapToByteArray=JSON.toJSONBytes(linkedHashMap);
System.out.println(MapToByteArray.length);
//3. byte to String
String byteArrayToString=JSON.toJSONString(MapToByteArray);
System.out.println(byteArrayToString);
//4. 使用base64 把string 轉成數組
byte[] stringToByteArray= com.alibaba.fastjson.util.Base64.decodeFast(byteArrayToString);
LinkedHashMap<Object,Object> stringToByteArrayToJavaBean= JSON.parseObject(stringToByteArray,LinkedHashMap.class);
System.out.println(stringToByteArrayToJavaBean);
//成功, 我們來試試 rocketMQ裡面的方法, 先轉json字元串,然後換數組.
String secondJavaBeanToJsonString=JSON.toJSONString(linkedHashMap);
byte[] bytes=secondJavaBeanToJsonString.getBytes("UTF-8");
System.out.println(bytes.length);
//這裡可以直接作為參數傳輸,體積很小
String jsonBytes=JSON.toJSONString(bytes);
//當然你也可以進一步把他轉成string 然後傳輸
LinkedHashMap<Object,Object> linkedHashMap1=JSON.parseObject(bytes,LinkedHashMap.class);
//over
//總結,
//感悟:1.如果使用 參數轉byte 數組,這樣進行網絡傳輸的話 很省流量. 這也就是為什麼 rocketMQ支撐億級隊列.
//感悟:2. byte[]轉 string 以後如果前後端約定好在固定位插入固定字母/數字 作為混淆, 這也是一種借口參數加密方法; 輕量級加密.不過也很安全了.