當前位置:
首頁 > 最新 > 服務化基石之遠程通信系列四:序列化協議之文本序列化

服務化基石之遠程通信系列四:序列化協議之文本序列化

在面向對象的編程語言中,對象是存在於內存中的。以Java為例,對象存在於運行狀態的JVM中,如果希望能夠在JVM停止運行後持久化的保存對象,則需要將內存中的對象轉換為一定的格式化數據,這個過程稱之為序列化。當JVM重啟後,讀取數據並重新轉化為對象,稱為反序列化。

因為各類成熟穩定的資料庫存在,開發者幾乎不會選擇採用對象序列化的方式作為應用程序的信息持久化存儲方案。但若將對象傳遞至網路,則對象本身同樣離開了本地JVM所能管控的範疇,因此同樣需要進行序列化和反序列化。分散式系統中的序列化主要用於應用程序在網路之間數據的交互。

概括來說,序列化協議是一種結構化數據格式,主要用於數據存儲和消息傳輸。序列化是將對象轉化為這種格式的方法。序列化的實現方案非常多,它所關注的重點是性能和異構語言的支持能力。

性能主要有3個指標:

1. 對象序列化後的位元組佔位大小。對象序列化之後是一串位元組數組,其中包含對象的屬性值以及元數據信息。

2. 序列化與反序列化的性能。這主要取決於它生成和解析位元組數組的方法。

3. 序列化工具自身的性能。主要是序列化工具創建自身對象的消耗。

異構語言的支持則劃分為文本和二進位兩種解決思路。

文本序列化

通過字元串文本的明文序列化方式在網路傳輸中較為常見,JSON和XML這兩種格式由於易於理解,且被各種開發語言廣泛支持,因而十分流行。JSON格式由於配置簡單,文本所佔空間更小,而且對於JavaScript的支持更加原生,因此漸漸的取代了XML的主導地位,日前變得更加流行。

JSON是JavaScript Object Notation的縮寫,它本身就是JavaScript的對象標記,可以直接轉化為JavaScript的對象。JSON是一種輕量級的數據交換格式,它基於 W3C制定的ECMAScript 規範的一個子集,採用完全獨立於編程語言的文本格式存儲和表示數據。

雖然JavaScript可以無障礙的將JSON文本和對象相互轉換,但卻無法在Java中做到同樣的事情。因此,運應而生了很多第三方處理JSON的序列化框架。我們介紹幾個常用且有各自特點的JSON序列化框架。

流式解析JSON序列化框架Jackson

Jackson是一個開源的Java類庫,它的主要用途是序列化Java對象為JSON文本,或反序列化JSON文本成為Java對象。Jackson採用流式增量的處理方式解析JSON, 因此在解析數據量比較大的JSON文本時比較有優勢。Jackson主要由jackson-core和jackson-databind這兩個模塊組成。jackson-core為jackson-databind提供了底層的解析和生成JSON文本的方法,而jackson-databind則進行了更好的封裝,提供了數據綁定和樹模型功能。採用jackson-core的底層API進行JSON處理的方式性能最佳,但編碼比較複雜,而數據綁定的方式則對開發比較友好。

下面是使用數據綁定的方式生成JSON的核心代碼示例:

下面是使用數據綁定的方式解析JSON的核心代碼示例:

輕量級JSON序列化框架Gson

Gson是Google公司開源的第三方Java庫,它的用途與Jackson類似,使用起來較為便利,在處理較大的JSON文本時,其性能略遜於Jackson。Gson可以通過標識版本號來確保JSON的兼容性,我們同樣以一個例子來說明如何使用Gson來序列化和反序列化對象。

Gson可以通過在對象屬性上使用@Since註解,用於表示這個欄位是在其聲明的版本之後才出現的,在這個版本之前該屬性可以忽略。Gson是可以通過它處理協議的向後兼容問題。

Gson還巧妙的復用了transient這個關鍵字。在對象中,聲明了transient的屬性不參與對象的序列化。關於transient關鍵字,我們在Java原生的序列化方案中還可以見到。

下面是使用Gson生成JSON的核心代碼示例:

下面是使用Gson解析JSON的核心代碼示例:

除了上面介紹的兩款以外,還有很多類似的框架,如最早的JSON解析工具json-lib和阿里巴巴開源的高性能JSON解析框架fastjson等。

以上內容節選自

《 Java雲原生新一代分散式中間件架構》

內容簡介

【互聯網架構不斷演化,經歷了從集中式架構到分散式架構,再到雲原生架構的過程。雲原生因能解決傳統應用升級緩慢、架構臃腫、不能快速迭代等問題而成為未來雲端應用的目標。本書首先介紹了架構演化及雲原生的概念,讓讀者對基礎概念有一個準確的了解。接著闡述容器調度、服務化、分散式等體系的原理,講解分散式中間件設計方法。最後輔以實戰,以中心化和平台化角度切入,深度揭秘兩大開源項目Elastic-Job和Sharding-JDBC的實現】

GIF

盡請期待

GIF

《Java雲原生 新一代分散式中間件架構》

2018將與您見面

書名尚未完全確定,歡迎您寶貴建議。

感謝大家關注「點亮架構」,歡迎對公眾號文章的內容批評指正,如果有其他想要了解的技術問題,也可以留言提出。

『點亮架構』的火炬,燃燒雲原生『


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

TAG:全球大搜羅 |