摘要:我們在使用對對象數據進行序列化的時候,發現序列化以后的二進制數組數據偏大的情況。考察下面的代碼我們會發現,針對這個萬個對象的的序列化后的數據達到了。如果我們再定義對象的時候添加一部分參數,我們會發現大小將會有顯著改善。
我們在使用?MessagePack 對 List 對象數據進行序列化的時候,發現序列化以后的二進制數組數據偏大的情況。
請注意,不是所有的 List 對象都會出現這種情況,這個根據你 List 對象中存儲的內容有關。
有關本問題的測試源代碼請參考:https://github.com/cwiki-us-d...?中的內容。
考察下面的代碼:
ListdataList = MockDataUtils.getMessageDataList(600000); ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); raw = objectMapper.writeValueAsBytes(dataList); FileUtils.byteCountToDisplaySize(raw.length); logger.debug("Raw Size: [{}]", FileUtils.byteCountToDisplaySize(raw.length));
我們會發現,針對這個 60 萬個對象的 List 的序列化后的數據達到了 33MB。
如果我們再定義??ObjectMapper 對象的時候添加一部分參數,我們會發現大小將會有顯著改善。
請參考下面的代碼:
ListdataList = MockDataUtils.getMessageDataList(600000); ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); objectMapper.setAnnotationIntrospector(new JsonArrayFormat()); rawJsonArray = objectMapper.writeValueAsBytes(dataList); logger.debug("rawJsonArray Size: [{}]", FileUtils.byteCountToDisplaySize(rawJsonArray.length));
如果你運行上面的代碼,你會看到程序的輸出字符串將會降低到 23MB。
這里面主要是?objectMapper.setAnnotationIntrospector(new JsonArrayFormat());?這句話起了作用。
在正常的場景中,我們可以通過 注解 JsonIgnore, 將其加到屬性上,即解析時即會過濾到屬性。
而實際實現,則是由類?JacksonAnnotationIntrospector?中 的?hasIgnoreMarker?來完成,則就是通過讀取注解來判斷屬性是否應該被exclude掉。ObjectMapper中默認的?AnnotationIntrospector?即是?JacksonAnnotationIntrospector?來完成,但我們可以通過 方法?ObjectMapper.setAnnotationIntrospector?來重新指定自定義的實現。
https://www.cwiki.us/display/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76015.html
摘要:完整的步驟如下檢查比特幣或的余額,錢包地址。比特幣的到帳時間是個塊的高度,約分鐘。 showImg(https://segmentfault.com/img/remote/1460000018952144?w=1200&h=659); 方案一: 通過ExinCore API進行幣幣交易 Exincore 提供了基于Mixin Network的幣幣交易API. 你可以支付USDT給Exi...
摘要:完整的步驟如下檢查比特幣或的余額,錢包地址。比特幣的到帳時間是個塊的高度,約分鐘。 showImg(https://segmentfault.com/img/remote/1460000018952144?w=1200&h=659); 方案一: 通過ExinCore API進行幣幣交易 Exincore 提供了基于Mixin Network的幣幣交易API. 你可以支付USDT給Exi...
摘要:是一個高效的二進制序列化框架它像一樣支持不同語言間的數據交換但是它的性能更快序列化之后的碼流更小的特點如下編解碼高效性能高序列化之后的碼流小支持跨語言編碼器和解碼器開發編碼器開發負責將類型的對象編碼為數組然后添加到集合中解碼器開發首先從數 MessagePack 是一個高效的二進制序列化框架, 它像 JSON 一樣支持不同語言間的數據交換, 但是它的性能更快, 序列化之后的碼流更小. ...
摘要:自然,設備還會通知多個傳感器的值和機器的狀態。然而的字符數較多,數據量較大。基于物聯網服務處理這些格式時,要把文本數據轉換成數值數據和二進制數據。因此,雖然這種數據格式不方便人們直接閱讀,但計算機卻能很容易地處理。 嵌入式開發中其實最重要的就是數據傳輸,這部分由于頻繁的使用,高效的格式和算法...
摘要:支持等眾多語言。此處的是經過封裝的,和中類似。相關模板均在類中定義,諸如。優化后的使用方法為中的錯誤先看看這段代碼反序列化后獲取,因為中是類型,這里面可能是,也可能是,因此需要注意。參考資料讓版支持類型 Msgpack簡介 MessagePack is an efficient binary serialization format. It lets you exchange data...
閱讀 1026·2021-11-22 13:53
閱讀 1579·2021-11-17 09:33
閱讀 2373·2021-10-14 09:43
閱讀 2836·2021-09-01 11:41
閱讀 2263·2021-09-01 10:44
閱讀 2905·2021-08-31 09:39
閱讀 1443·2019-08-30 15:44
閱讀 1853·2019-08-30 13:02