浅谈几种序列化协议
工作中用過幾種知名的序列化協議,說說自己的感受吧,先獨立講各自的概念,然后比較下他們的優缺點。
JSON(Javascript Object Notation)官方網站是這樣敘述的:一種輕量級的資料交換語言。易于人閱讀和編寫。同時也易于機器解析和生成。json有兩種結構:1.名稱/值,例如:{
??"name"??: "xiaoming",
??"age"??:????12
}
你也可以再嵌套一層,例如:{
??"name":
??{
????"first_name" : "xiao",
????"last_name" : "ming"
??},
??"age" :12
}
2.值的有序列表,例如:{
??"week":
??[
????"monday",
????"tuesday"
??]
}
也可以這樣,例如{
??"week":
??[????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????{"english" :"monday",??"chinese" :"星期一"},
????{"english" :"tuesday", "chinese" :"星期二"}
??]
}
怎么樣,是不是很直觀,組合方式也很自由。所以很多文檔型數據庫都采用json作為存儲結構;
json提供對多種編程語言的支持,詳見官網http://www.json.org, 我使用過c++的libjson,注意操作時加上異常處理,否則約定錯誤時解析會導致程序崩潰, javascript更簡單,直接加進json.js即可。
XML:(Extensible Markup Language)大名鼎鼎的xml語言,對于他只講講解析方式吧!
第一類是基于XML文檔樹結構的解析,如DOM(Document Object Model);第二類是基于流式的解析,如SAX(Simple API for XML)、StAX(Stream API for XML)和XPP(XML Pull Parser);第三類是基于非提取式的解析,例如VTD-XML(Virtual Token Description for XML)。
這里有篇詳細介紹這幾種解析方式概念和適用場景的文章,講述的很好,希望大家參閱http://blog.csdn.net/liuhuang007/article/details/6252569
protobuf:google提供的一個開源序列化框架,官網是這樣解釋的“Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the "old" format.”
總結一下特點:是基于二進制的,開發人員按照它提供的語法規則定義好消息格式,然后利用它提供好的編譯工具自動生成相關的類,就可以很輕松的通過調用相關方法完成消息的序列化與反序列化。具體如何使用請大家參考官方文檔http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/overview.html
結合自己的實踐(c++語言)比較下三者:
序列化和反序列化的效率:protobuf高于json,json高于xml;
可讀性:xml和json我覺得難分伯仲,但是他們都好于protobuf的二進制格式;
編碼復雜度:xml高于json和protobuf,至于json和protobuf,流程上protobuf要復雜些,json只要引入相應的庫就行了,而protobuf首先要按規則寫消息結構,然后編譯成相應的類。
適用場景:我認為xml比較適合與本地存儲配置文件,而json和protobuf適合于進程間消息通訊或網絡間消息通訊(注:soap是基于xml的,也許當時人們普遍認為xml是銀彈吧)
JSON(Javascript Object Notation)官方網站是這樣敘述的:一種輕量級的資料交換語言。易于人閱讀和編寫。同時也易于機器解析和生成。json有兩種結構:1.名稱/值,例如:{
??"name"??: "xiaoming",
??"age"??:????12
}
你也可以再嵌套一層,例如:{
??"name":
??{
????"first_name" : "xiao",
????"last_name" : "ming"
??},
??"age" :12
}
2.值的有序列表,例如:{
??"week":
??[
????"monday",
????"tuesday"
??]
}
也可以這樣,例如{
??"week":
??[????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????{"english" :"monday",??"chinese" :"星期一"},
????{"english" :"tuesday", "chinese" :"星期二"}
??]
}
怎么樣,是不是很直觀,組合方式也很自由。所以很多文檔型數據庫都采用json作為存儲結構;
json提供對多種編程語言的支持,詳見官網http://www.json.org, 我使用過c++的libjson,注意操作時加上異常處理,否則約定錯誤時解析會導致程序崩潰, javascript更簡單,直接加進json.js即可。
XML:(Extensible Markup Language)大名鼎鼎的xml語言,對于他只講講解析方式吧!
第一類是基于XML文檔樹結構的解析,如DOM(Document Object Model);第二類是基于流式的解析,如SAX(Simple API for XML)、StAX(Stream API for XML)和XPP(XML Pull Parser);第三類是基于非提取式的解析,例如VTD-XML(Virtual Token Description for XML)。
這里有篇詳細介紹這幾種解析方式概念和適用場景的文章,講述的很好,希望大家參閱http://blog.csdn.net/liuhuang007/article/details/6252569
protobuf:google提供的一個開源序列化框架,官網是這樣解釋的“Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the "old" format.”
總結一下特點:是基于二進制的,開發人員按照它提供的語法規則定義好消息格式,然后利用它提供好的編譯工具自動生成相關的類,就可以很輕松的通過調用相關方法完成消息的序列化與反序列化。具體如何使用請大家參考官方文檔http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/overview.html
結合自己的實踐(c++語言)比較下三者:
序列化和反序列化的效率:protobuf高于json,json高于xml;
可讀性:xml和json我覺得難分伯仲,但是他們都好于protobuf的二進制格式;
編碼復雜度:xml高于json和protobuf,至于json和protobuf,流程上protobuf要復雜些,json只要引入相應的庫就行了,而protobuf首先要按規則寫消息結構,然后編譯成相應的類。
適用場景:我認為xml比較適合與本地存儲配置文件,而json和protobuf適合于進程間消息通訊或網絡間消息通訊(注:soap是基于xml的,也許當時人們普遍認為xml是銀彈吧)
總結
- 上一篇: Lync前端服务器的卸载
- 下一篇: DNS原理及简单配置