2011-10-05 66 views
4

像XML這樣的固定寬度文件格式有什麼優勢嗎?我意識到XML可能會佔用更多的磁盤空間來存儲相同數量的數據,但該文件也可能被壓縮。理論上,我想你也可以根據它在文件中的位置來讀取特定的數據(只是抓住這些字節)。但除此之外,還有什麼?爲什麼固定寬度文件格式仍在使用中?

+0

什麼文件格式?你想將圖像或視頻作爲壓縮的XML嗎? – svick

+1

@svick:不要傻,你知道我在問什麼! –

+3

不,我真的不知道。我不知道你在說什麼類型的文件格式,從你的問題來看,我不清楚。也許我只是沒有遇到這些格式。你能更明確地指定嗎? – svick

回答

0

其中一個原因可能是處理XML(不僅僅是讀取和加載到內存結構中,而是考慮XML文件中的正則表達式搜索與簡單的固定寬度或分隔文件,甚至是手動快速修復爲壞數據)比固定寬度文件更復雜。當然,現在有很多庫可以爲你做,但是如果沒有一個庫用於你正在開發的平臺,你真的想編寫一個XML解析器,或者是一個只讀n的程序嗎?字節在地點x

1

可能主要是出於遺留原因,因爲XML,JSON(等)的解析器幾乎存在於所有平臺上。

按照您的建議,理論上固定寬度的格式可以更節省空間;並閱讀比較簡單。但是這些看起來不像是顯着的好處。

值得一提的是,像CSV這樣的表格式(但不是固定寬度)格式有其用途,它結合了更緊湊的表示形式和更好的可讀性; CSV對於地圖/縮小作業非常合適。

5

XML很複雜。特別是如果你根據模式進行驗證。這看起來並不重要,因爲其他人已經編寫了可以使用的XML解析器。但是這增加了相當多的處理,這意味着需要更長的時間。這在許多情況下可能不是問題,但有時可以。

如果您希望將一個整數保存爲自定義文件格式,則只需要4個字節,當您想要加載它時,只需將這4個字節複製到內存中(假定文件格式和平臺具有相同的字節序)。但對於XML,它可能需要10-30個字節。加載它意味着比較字符串和解析整數的十進制表示,可能更多。

再說一次,那些性能和存儲大小的差異可能太小,你甚至可以考慮(以及設計自定義格式所需的工作可能不是微不足道的),但在很多情況下,這些差異事。

例如,我遇到了一個使用SMS消息傳輸某些數據的系統。這意味着每條消息有140個字節(!)。發送和接收這些消息的設備沒有GB的內存和GHz的CPU。在這種情況下,請確保每個都重要,您當然不會使用XML。

+0

感謝您的回答。但是,我認爲複雜的固定寬度文件比複雜的XML文件更令人困惑。至少你可以閱讀XML文件! –

+1

我仍然不知道你在說什麼類型的固定寬度格式,所以我無法迴應。 – svick

15

當數據量很大時(千兆字節/字節),固定寬度格式文件可以更有效率地提高更多

由於每個記錄和字段都有固定大小,因此您可以簡單地尋找(例如)第n百萬行並從那裏讀取幾條記錄。您還可以將整個文件映射到內存中,並獲得對所有內容的高效且輕鬆的隨機訪問。

XML文件不適合這些情況。

0

我也有同樣的問題,直到我意識到固定寬度的力量。由於JSON將文件大小擴大到15GB和2 + hrs,我們有一張包含數百萬條記錄的表格,將它們提取到文件中。雖然使用固定的widht將其降至6.5GB和15分鐘。

提取和寫入固定寬度比JSON快。

我也試過CSV,甚至在這裏固定寬度得分更好。

1

我知道這是舊的,但我每天都處理固定寬度和XML。你幾乎可以和它到:

XML =可讀性

固定寬度=速度和資源消耗低

XML在很大程度上是由人類可讀性。我不在乎任何人有關結構和驗證的說法。如果你正在運行一個真正不需要的系統,並且應該讓人類來回傳閱文件,那麼你實際上只是把這個額外花費在處理文件和處理文件所花費的時間上影響文件傳輸內容所需的時間以及處理的其他影響。所有這些還會影響使用XML文件的系統的內存使用情況。 但是XML有優點。你可以更鬆散地定義你的結構。如果你的文件和代碼不需要一個字段長度爲255個字符,有時候它會更容易。只有你的代碼加載了限制期。 另一個優點是XML可以/應該帶有定義XML內容需求的XML模式。這有助於使多個系統使用單個API。如果您可以將模式提供給開發人員,他們可以很快地創建類型化對象,將其序列化爲適當的格式化和結構化的XML。

固定寬度是爲了速度和最小的資源消耗。設置比XML更繁瑣。確保所有系統都知道固定寬度文件中「列」的確切位置。通常不是所有的系統都使用相同或全部的色譜柱,因此您最終只能得到一個完全理解固定寬度內容的系統。這可能會增加使用傳輸文件內容的API或系統的難度。但是,由於沒有字段標籤,沒有標籤,只有原始數據,所以通常可以通過線纜發送更小的包。並非總是如此,在某些情況下,您可能會有大量常見的字段中存儲少量數據的文本字段,但在輸入段落長度的情況下,必須保留較大的列寬。現在,您的固定寬度文件中存在一堆空白空間,XML實際上可能會減少整個包的大小。

一般來說,XML是爲了可讀性。您通常不會選擇固定寬度文件甚至是CSV文件,並立即開始掌握數據的含義。您也可以在標有XML文件的位置找到。

有許多優點和缺點,我沒有去,但這是我看到真正的肉和土豆的差異。