我目前很好奇其他程序員如何將數據組織到文件中。 任何人都可以推薦任何有關創建文件結構的最佳做法的好文章或書籍嗎?例如,如果您爲任何目的而創建了自己的軟件,您是否將保存的數據保存爲純文本,序列化,編碼爲xml,以及爲什麼要這樣做?自定義文件結構的最佳實踐
我有遺漏的祕密嗎?
我目前很好奇其他程序員如何將數據組織到文件中。 任何人都可以推薦任何有關創建文件結構的最佳做法的好文章或書籍嗎?例如,如果您爲任何目的而創建了自己的軟件,您是否將保存的數據保存爲純文本,序列化,編碼爲xml,以及爲什麼要這樣做?自定義文件結構的最佳實踐
我有遺漏的祕密嗎?
一般來說,最起碼可以用最簡單的辦法去做,考慮一下,比如UNIX,其中大多數配置文件只是以空格分隔的字段,或者以另一個字符(例如/ etc/passwd,因爲GCOS字段可以包含空格使用「:」分隔符)分隔的字段。
如果您的數據需要更多結構,那麼問自己「我可以輕鬆使用哪些工具?」例如,Python和Ruby有JSON和YAML。
如果您已經有很多基於XML的東西,或者您希望在瀏覽器中將XML轉換爲可顯示的表單,那麼XML基本上很有用。否則,它通常是非常重量級的(代碼大小,複雜度)。
無論您選擇哪種格式,都要記住在內部存儲某種版本號(我非常確定您必須引入一些更改)。
格式很大程度上取決於應用程序和數據量。對於某些應用程序而言,XML是合適的,對於其他應用程序,存儲在二進制文件中的固定大小的結構是很好的。
我使用許多不同的格式,取決於情況,例如:
除非你有獨特的要求,使用的東西,其已經有一個成熟的庫,所以你可以避免編寫自己的解析代碼。就像人們所說的那樣,這意味着XML/JSON等。
另一個不錯的是Google的協議緩衝區(http://code.google.com/p/protobuf)。在那裏,您編寫了一個公共消息定義,並且協議緩衝區編譯器生成了用於爲您填寫,序列化和反序列化數據的對象。通常格式是二進制格式,但您可以使用TextFormat類來編寫類似JSON的純文本格式。 protobufs的好處在於版本代碼是爲您生成的。在您的文件格式的第2版中,您所要做的就是將字段添加到.proto定義文件。新版本可以讀取舊文件格式,並將新字段留空。這不是protobufs的設計目標,但是它爲自定義消息提供了一種簡單高效的二進制文件格式,並且爲您生成了代碼。
另請參閱Facebook的Thrift,現在在Apache孵化器中。
隨着歲月的流逝,我發現自己越來越青睞文本,除非它完全沒有問題。 CPU速度足夠快,我們可以足夠快地解碼它。
顯然,當你不得不經常更新一個大文件中的小塊信息時,這不是一個選項 - 但很可能描述了一個數據庫。
在這一點上需要一種不尋常的情況,讓我去選擇除了這兩種選擇之外的東西。
用於XML的+1。有一點點開銷,但易於解析,讀取和調試。如果你使用模式,可以是嚴格的。易於使用XSLT進行轉換,並且非常便於攜帶(在電線中或僅在潛入式驅動器中:)
這實際上取決於特定情況。您需要考慮針對各種問題的答案:
數據本身的性質會產生影響。這是一個扁平列表結構嗎?它是一棵樹嗎?這是一個循環圖嗎?記錄的寬度是固定還是可變?
一旦這些問題的答案已知,您可以在您的選項中進行選擇,儘可能保持簡單。通常流行的選項(XML,CSV,YAML)將適合您的目的。如果沒有,那麼你將不得不開發自己的格式和你自己的寫作和閱讀程序。
有這麼多的可能性,但最務實的必須是XML
我同意。我也會說,想想未來可能會給你的數據結構帶來什麼。例如,如果將新字段添加到數據中,請確保您的文件格式可以輕鬆擴展。 – 2009-03-01 22:56:50