2012-05-18 6 views
1

Я написал простой инструмент командной строки для особой необходимости конвертировать определенный INI-файл в список свойств. Я использую NSPropertyListSerialization, чтобы написать словарь в файл списка двоичных свойств 307kb. Однако, когда я пишу его в XML и после преобразования его с помощью plutil в список свойств двоичного файла, размер файла составляет всего 224 КБ.Сжимающие пластины - NSPropertyListSerialization vs 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 thread, plutil будет искать идентичные поддеревья, такие как массивы и уникальные в получаемом в результате plist. NSPropertyListSerialization давно используется, но это было устранено, потому что процесс относительно медленный, и разработчики ожидают, что сериализация будет работать как можно быстрее.

После того, как поиск в Интернете по нему не похож, будет легко найти код, чтобы сделать это самостоятельно. Вам просто нужно иметь дело с небольшой разницей в размере или попытаться свернуть собственный сериализатор.

+0

Может быть, веселый проект github для лета тогда :) –

 Смежные вопросы

  • Нет связанных вопросов^_^