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