先舉個例子,如果你瞭解一下csv格式和txt格式就會發現,csv格式只不過是使用txt格式並把內容按照表的分列用逗號隔開了而已(然後換了個副檔名)。
那麼,要設計一種檔案格式,如果只是你自己用,那你想怎麼存就怎麼存、按什麼順序存資訊你自己決定就可以了,副檔名最好不要跟常用的一樣,然後保證你的程式能讀出檔案內容就好。
然後我們試試更進一步,要使你自己設計的這個格式有區分性,比如,你可以要求副檔名必須為wdgs,然後這個檔案第一行頭四個位元組必須是542B(16進位制)。為什麼要這樣做?這是為了區分同樣叫wdgs的副檔名的檔案究竟是不是你的檔案。
然後如果按照工程角度的設計出發,後面一般會跟檔案格式版本用的幾個位元組,你也可以考慮設計上去,這是為了如果以後你修改了你的檔案格式,還能根據版本用不同的解析方法把檔案內容讀出來。
再然後還是按照工程角度出發,可以考慮加上記錄檔案總大小用的幾個位元組,這是為了當一個檔案涉及網路傳輸或複製等時,你還能大概判斷這檔案是不是完整。
接下來的部分,就看你拿這檔案幹什麼了。如果只是存鍵值對組合,那直接存就行了,加些標籤存也可以(這方面的例子參見XML和JSON的檔案格式,XML有些在頭部還有明文的版本號、適用標準等等資訊,json一般就只存實質內容了,就是那些鍵值對,甚至格式也直接用符號來區分了,標籤也省了。html檔案也是這樣的例子)。
如果是要存圖片,那可以把畫素逐個解析出來按顏色儲存,事實上,這就是BMP檔案格式的做法。
看到bmp可能你又考慮jpg、png這些,這些是涉及了壓縮演算法的,所以實際存在檔案裡時,要把檔案分節分段,然後一節存圖片本身的畫素摘要資訊,一節存插值演算法的摘要資訊等等(你不明白的話,可以這樣考慮:我要存10000000000這個數,那麼我可以存成“10000000000”,也可以存成“1後十個0”對吧,顯然後者比前者短了,也就是減小了檔案大小)
有了分節分段這些策略以後,存個影片什麼的都不是問題了,可以把影片存成一幀一幀的(事實上原始格式的avi就是這樣),依次類推。
這樣,你只要考慮你要存哪些東西,這些東西怎麼轉變為有序的數字/文字/位元組(事實上最終都是位元組)以供你存的時候能記住、取的時候不會亂,這樣就能設計出你需要的檔案格式了。
你要是樂意,也可以要求你的檔案必須以你的名字+萬歲的UTF8編碼為結束才能被認可,哈哈,只要大家認可這格式就行。所謂你寫的程式,規則是你定的。
先舉個例子,如果你瞭解一下csv格式和txt格式就會發現,csv格式只不過是使用txt格式並把內容按照表的分列用逗號隔開了而已(然後換了個副檔名)。
那麼,要設計一種檔案格式,如果只是你自己用,那你想怎麼存就怎麼存、按什麼順序存資訊你自己決定就可以了,副檔名最好不要跟常用的一樣,然後保證你的程式能讀出檔案內容就好。
然後我們試試更進一步,要使你自己設計的這個格式有區分性,比如,你可以要求副檔名必須為wdgs,然後這個檔案第一行頭四個位元組必須是542B(16進位制)。為什麼要這樣做?這是為了區分同樣叫wdgs的副檔名的檔案究竟是不是你的檔案。
然後如果按照工程角度的設計出發,後面一般會跟檔案格式版本用的幾個位元組,你也可以考慮設計上去,這是為了如果以後你修改了你的檔案格式,還能根據版本用不同的解析方法把檔案內容讀出來。
再然後還是按照工程角度出發,可以考慮加上記錄檔案總大小用的幾個位元組,這是為了當一個檔案涉及網路傳輸或複製等時,你還能大概判斷這檔案是不是完整。
接下來的部分,就看你拿這檔案幹什麼了。如果只是存鍵值對組合,那直接存就行了,加些標籤存也可以(這方面的例子參見XML和JSON的檔案格式,XML有些在頭部還有明文的版本號、適用標準等等資訊,json一般就只存實質內容了,就是那些鍵值對,甚至格式也直接用符號來區分了,標籤也省了。html檔案也是這樣的例子)。
如果是要存圖片,那可以把畫素逐個解析出來按顏色儲存,事實上,這就是BMP檔案格式的做法。
看到bmp可能你又考慮jpg、png這些,這些是涉及了壓縮演算法的,所以實際存在檔案裡時,要把檔案分節分段,然後一節存圖片本身的畫素摘要資訊,一節存插值演算法的摘要資訊等等(你不明白的話,可以這樣考慮:我要存10000000000這個數,那麼我可以存成“10000000000”,也可以存成“1後十個0”對吧,顯然後者比前者短了,也就是減小了檔案大小)
有了分節分段這些策略以後,存個影片什麼的都不是問題了,可以把影片存成一幀一幀的(事實上原始格式的avi就是這樣),依次類推。
這樣,你只要考慮你要存哪些東西,這些東西怎麼轉變為有序的數字/文字/位元組(事實上最終都是位元組)以供你存的時候能記住、取的時候不會亂,這樣就能設計出你需要的檔案格式了。
你要是樂意,也可以要求你的檔案必須以你的名字+萬歲的UTF8編碼為結束才能被認可,哈哈,只要大家認可這格式就行。所謂你寫的程式,規則是你定的。