老早就想做這個事情了,想當初做協議代碼實現的時候那個揪心啊,各種重復的代碼一遍一遍的寫。后來發現了Google的Protobuf,初次看見真TMD驚艷,,,
吐槽下,Google的開源項目都不怎么地道,基本都是開代碼不開文檔,或文檔少的可憐,,,
在后來項目上要用到序列化技術,而且我們的序列化工具類是鍵值對。何為鍵值對呢,,,囧,這個很難描述,先暫時記錄下我對序列化的理解。
//////////////////////////////////////////////////////////////////////////////////////////////
序列化一個抽象的概念,每個人可能理解都不同,我們約定這里談的序列是這個:
序列化就是把一個語言成面上的依賴上下文的“對象”,變成一個精煉的語言、上下文無關的數據(可以是一塊內存,可以是一坨文件等等任何數據的載體)的動作;
抽空百度了下,百度百科給出的解釋如下:
序列化 (serialization) 將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。
//////////////////////////////////////////////////////////////////////////////////////////////
題外話結束,繼續說我們項目上需求的鍵值對。
剛剛的穿插序列化定義理解中可以分析出:一個序列化的數據中除了包含有原始的“數據”信息應該還包含有“數據”的描述信息。一般的需求中這個描述信息只要包含有類型信息就好了。
比如某個“對象”序列化以后數據信息是0x63,我去,,,鬼才能知道這是什么意思,是數字?字符?還是什么別的特殊的東西?
所以需要描述信息。比如1表示是字符,2表示是int,3表示是系統內部特定標識等等,,,
這個偶們的鍵值對還是沒有任何關系? no no no,我們的鍵值對就是除了這個類型信息呢,還要加一個名字。偶們內部的變量不僅是有類型的還是有名字的,,,也就是說描述信息中除了有類型還要有名字,,,
////////////////////////////////////////////////////////////////////////////////////////////
前幾天研究了下浮點怎么在網絡中傳輸。應為不同的機器或者不同的OS對浮點存儲方式是不同的。后來研究了下幾個開源的項目加上自己突然想起來大端小端int在網絡上的傳輸方式,突然發現這個問題沒有糾結的價值。標準嘛,大家統一標準就好了,誰的影響力大咱們就聽誰的,,,要擁抱世界,盡量成為一個兼容的標準。無法反抗,那就只能享受了吧,,,誰讓人家拳頭大,推廣好呢?
///////////////////////////////////////////////////////////////////////////////////////////
恩?剛剛上面不是主題,主題是這半個月要在不影響工作的前提下好好研究代碼生成技術,其實這是為后面咱自己的序列化工具(類Google protobuf)打基礎哈,,,
叫啥名好呢?囧,,,但愿這次咱能堅持做出來,,,