Protostuff詳解
Protostuff詳解
作者:chszs,未經博主允許不得轉載。經許可的轉載需註明作者和部落格主頁:http://blog.csdn.net/chszs
一、Protostuff介紹
Protostuff是一個開源的、基於Java語言的序列化庫,它內建支援向前向後相容(模式演進)和驗證功能。
Protostuff支援的序列化格式包括:
- protobuf
- protostuff
- graph
即序列化物件圖,即帶迴圈引用的protostuff。詳見:http://www.protostuff.io/documentation/object-graphs/ - json
- smile
即二進位制json,從protostuff-json模組中使用。Smile資料格式是由Jackson JSON庫開發團隊於2010年釋出的資料格式,並在Jackson 1.6版本開始使用此格式。
Smile格式規範:http://wiki.fasterxml.com/SmileFormatSpec
與此相似的有BSON格式,見:http://bsonspec.org/
要注意一點,Smile資料格式和BSON資料格式是互不相容的。比如BSON定義了日期型別,而Smile沒有日期型別。而且,有時候BSON資料格式佔用的空間比原生JSON佔用的空間更多。所以,對於二進位制JSON來說,Smile才是更好的選擇。
可以參考通用二進位制JSON規範《Universal Binary JSON Specification》:http://ubjson.org/ - xml
- yaml
只支援序列化 - kvp
即二進位制的uwsgi頭部(Header),詳見:http://projects.unbit.it/uwsgi
二、Protostuff特徵
1、支援protostuff-compiler產生的訊息
2、支援現有的POJO
3、支援現有的protoc產生的Java訊息
4、與各種移動平臺的互操作能力(Android、Kindle、j2me)
5、支援轉碼
三、Protostuff的模組
1、protostuff-api模組
面向訊息和POJO(message/pojo)的序列化API,內建了對模式演進的支援。
可以與現有物件一起工作,只需新增模式Schema。可以通過程式碼生成、在執行時使用protostuff-runtime生成、或者是手寫產生。
2、protostuff-core模組
繫結了三種二進位制格式:protostuff、graph、protobuf。
protostuff與protobuf的區別:
1)protobuf有一個名為“group”的編碼型別域,而protostuff使用它作為巢狀的訊息。
2)protostuff可以使用尾部界定符來處理訊息流(Stream)。
3)protostuff的一級類在本地格式中支援迴圈引用。
3、protostuff-runtime模組
自動啟用現有的POJO序列化/反序列化為各種格式。
可使用執行時序列化策略,w/c通過系統屬性進行配置。
依賴於protostuff-API和protostuff-collectionschema。
4、protostuff-json模組
面向訊息或POJO的JSON序列化/反序列化。
面向標量域的向前向後相容。
依賴於protostuff-api、jackson-core-asl-1.7.9。如果使用了Smile格式,還需jackson-smile-1.7.9。
5、protostuff-parser模組
使用了ANTLR V3、面向.proto檔案的詞法/語法解析器。
供protostuff-compiler使用。
6、protostuff-compiler模組
面向.proto原始檔的編譯器。
可以從檔案系統、類路徑或從網路HTTP URL中載入.proto原始檔。
可使用引數-Dproto_path=$path告訴編譯器從哪裡載入原始檔。
可擴充套件/定製編譯的輸出。
要編譯原始檔,執行命令:
java -jar protostuff-compiler-1.0.9.jar
protostuff.properties屬性檔案定義:
modules = foo
foo.source = path/to/your/foo.proto
#java_bean, gwt_overlay, java_v2protoc_schema
foo.output = java_bean
foo.outputDir = generated
foo.options = some_key,key:value,another_key
依賴於protostuff-parser模組。
7、protostuff-me模組
對於j2me應用,無需外部依賴
與api模組和core模組結合一起使用,去掉了Java泛型支援。
四、模式Schema
Schema包含:
1)物件進行序列化的邏輯
2)物件進行反序列化的邏輯
3)物件必填欄位的驗證
4)物件欄位名稱到欄位編號的對映
5)物件的例項化
對於現有的物件,必須使用protostuff-runtime來生成Schema——可以通過反射來快取、使用Schema。
開發者更喜歡自定義Schema,比如對必填欄位的驗證等,那麼可以手動編碼。
相關文章
- Protostuff開發
- Protocol Buffer序列化Java框架-ProtostuffProtocolJava框架
- 什麼是Netty編解碼,Netty編解碼器有哪些?Protostuff怎麼使用?Netty
- 使用netty結合Protostuff傳輸物件例子Netty物件
- 基於protostuff的序列化工具類開發
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- jackson、fastjson、kryo、protostuff等序列化工具效能對比ASTJSON
- Lombok 註解詳解Lombok
- Java註解詳解Java
- Java 註解詳解Java
- Java註解最全詳解(超級詳細)Java
- HiveQL詳解Hive
- 詳解Inode
- Vuex詳解Vue
- PWA詳解
- 詳解CountDownLatchCountDownLatch
- DiffUtil詳解
- iptables詳解
- TCP詳解TCP
- CDN詳解
- Typescript詳解TypeScript
- Mybatis詳解MyBatis
- Synchronized詳解synchronized
- TLS 詳解TLS
- 詳解bind
- 詳解GOPATHGo
- HTTP 詳解HTTP
- JavaScript this詳解JavaScript
- BT詳解
- nginx 詳解Nginx
- @autowired詳解
- ECharts 詳解Echarts
- DiskBasedCache詳解
- JavaWeb詳解JavaWeb
- IndexedDB詳解Index
- BART詳解
- JDBC詳解JDBC
- Pod詳解