此文仅解释自己,工作遇到的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 以后如果前后端约定好在固定位插入固定字母/数字 作为混淆, 这也是一种借口参数加密方法; 轻量级加密.不过也很安全了.