天天看點

com.alibaba.fastjson

此文僅解釋自己,工作遇到的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 以後如果前後端約定好在固定位插入固定字母/數字 作為混淆, 這也是一種借口參數加密方法; 輕量級加密.不過也很安全了.
           

繼續閱讀