序列化文件可能要注意的幾點(diǎn):(不足給予補(bǔ)充)
1.不同cpu體系結(jié)構(gòu)的硬件所支持的字節(jié)序不同,所以序列化的目標(biāo)數(shù)據(jù)要以一種字節(jié)序?yàn)橹鳎话惴譃樾《耍蠖耍镜囟耍ǜ鶕?jù)程序運(yùn)行的機(jī)器來的)。
2.在序列化的時(shí)候就要考慮反序列化的一些便利,可以對(duì)原始數(shù)據(jù)類型做分類,所有組合原始數(shù)據(jù)的高級(jí)數(shù)據(jù)一般通過索引原始數(shù)據(jù)來獲取(這樣也降低了數(shù)據(jù)冗余),這樣你就可以保證數(shù)據(jù)的chunk化。
3.盡可能地讓文件格式不同于其他,為了此文件格式的擴(kuò)展可以做一些版本指定。
4.如果你考慮到serialize的靈活性,就一定要抽象device以及stream這2個(gè)概念,device控制著使用什么stream去讀寫,而stream直接操縱buffer,所以在stream你可以控制讀寫數(shù)據(jù)的安全性(多線程)與效率。
5.現(xiàn)在不只考慮serialize單個(gè)文件,而考慮序列化一個(gè)文件層次結(jié)構(gòu)到硬盤,一般會(huì)抽象出個(gè)archive來,這個(gè)archive存儲(chǔ)在硬盤上,所以首先這些數(shù)據(jù)的序列化必須滿足os的文件系統(tǒng)格式(這個(gè)不用擔(dān)心了,直接操作FILE,fstream就ok了),而后為了數(shù)據(jù)包裝(一是為了安全,二是為了大小,三是為了不凌亂),我們一般要對(duì)archive進(jìn)行拓展,拓展archive的行為,比如在內(nèi)存寫到硬件這個(gè)基本函數(shù)的進(jìn)行壓縮并加密,而在硬盤恢復(fù)到內(nèi)存這個(gè)基本函數(shù)上進(jìn)行解壓縮并解密,這里存在個(gè)問題,archive不是一次性讀取到內(nèi)存,所以最好給每個(gè)archive做個(gè)頭數(shù)據(jù),至少保證這個(gè)頭數(shù)據(jù)一定要讀到內(nèi)存,頭數(shù)據(jù)的意義就是選擇性地讀取archive的數(shù)據(jù)段,羅列archive的層次結(jié)構(gòu)等(至于大小寫敏感的問題,盡量做一些協(xié)調(diào))。