2012-05-18 87 views
1

我寫了一個簡單的命令行工具,用於將特定ini文件轉換爲屬性列表的特殊需要。我正在使用NSPropertyListSerialization將字典寫入307kb的二進制屬性列表文件。但是,當我將它寫入XML並使用plutil將其轉換爲二進制屬性列表後,該文件的大小隻有224kb。壓縮plists - NSPropertyListSerialization與plutil?

我想保存儘可能多的數據,但我也想遠離NSTask。這裏的問題是,如何使用plutil實現代碼的相同結果。

+0

第一步是找出爲什麼大小有所不同。你能夠檢查這兩個文件,看看多餘的空間來自哪裏?儘管二進制數據可能很難。 –

+0

這裏有一個非常古老但可能相關的主題:http://www.cocoabuilder.com/archive/cocoa/153341-nspropertylistserialization-plutil-bloat-in-tiger-vs-jaguar.html。顯然某些實現將尋找相同的數組和其他項目,並專門處理。但'NSPropertyListSerialization'不會這樣做,因爲開發人員希望它儘可能快地工作。所以我猜plutil正在做這個重複的檢測,而NSPropertyListSerialization不是。 –

回答

0

根據this very old threadplutil將查找相同的子樹,如數組,並在生成的plist中使它們唯一。 NSPropertyListSerialization很久以前就被用來做這個,但是這個被刪除了,因爲這個過程相對較慢,開發者期望序列化儘可能快地工作。

搜索後看起來好像不太容易找到自己的代碼。你可能只需要處理這個小小的差異,或者嘗試推出你自己的序列化器。

+0

可能是一個有趣的github項目,那麼夏天:) –