Двоичный или ASCII размер файла

17

Мне нужно записать некоторые данные из вычислений, которые позже будут прочитаны Paraview (файл .vtu или vtk).

Когда дело доходит до размера файла, я должен перейти на формат ASCII или двоичный формат?

SAAD
источник

Ответы:

20

Если вас беспокоит только размер файла, вам нужны двоичные файлы. В качестве иллюстративного примера давайте предположим, что вы записываете 1 число с плавающей запятой двойной точности в файл. Давайте предположим, что файловая система может справиться с этим отлично и удерживая файл, заголовки и отступы равны 0.

Для двоичного файла это число будет принимать точный размер числа в ОЗУ или 8 байтов.

В формате ASCII он будет содержать:

  • 16 цифр базы
  • 1 период для десятичной
  • 1 символ для определения степени
  • 1 символ для знака экспоненты
  • 2-3 символа для экспоненты

Предполагая, что он использует только 1 байт для символа, то есть 22 байта для хранения того же числа. Это не считается символов, необходимых для разделения между числами (как правило, по крайней мере 1). Поэтому размер файла для формата ASCII будет примерно в 3 раза больше.

Вы можете обменять размер файла на точность сохраненных файлов (оставьте только 5-6 цифр в базе), но это зависит от того, для чего вы их используете. Основным преимуществом ASCII является отладка или создание удобочитаемых данных.

Годрик Провидец
источник
3
Также важным в научной сфере является долгосрочное архивирование и надежное совместное использование, поэтому ASCII CSV, несмотря на свою неэффективность, является столь распространенным и рекомендуемым (PDF) .
Horchler
2
Еще один полезный момент: несмотря на то, что кодировка ASCII CSV не очень эффективна, использование утилиты сжатия файлов (например, zip, gzip и т. Д.) В файле ascii обычно приводит к уменьшению размера файла до уровня, близкого к размеру двоичного файла. ,
Брайан Борхерс
3
Будьте осторожны, потому что некоторые библиотеки ввода / вывода недостаточно внимательны, чтобы получить бит для воспроизводимости битов, когда вы выводите числа двойной точности IEEE в ASCII, а затем читаете их обратно. По моему опыту, использование 17 или 18 десятичных цифр иногда необходимо для безопасности ,
Брайан Борчерс
5
Что касается комментария Хорхлера: я уверен, что хорошо используемые, стандартизированные открытые двоичные форматы, такие как HDF5, будут существовать очень долго. Это то, что я лично рекомендую.
AlexE
1
+ Я придерживаюсь двоичного кода, когда это возможно, для точности, компактности, душевного спокойствия и (особенно) скорости. Тогда, если мне нужна дополнительная компактность, я могу застегнуть ее. Если мне нужно визуально прочитать содержимое, я могу написать небольшую программу для этого. С другой стороны, если важнее быть визуальным и легко передаваться случайным программам, таким как Excel, R и т. Д., CSV - это то, что нужно.
Майк Данлавей
15

На практике вам редко нужны данные в файлах визуализации, более точные, чем, скажем, 3 действительные цифры. В этом случае ASCII - может быть удивительно - часто более компактен, чем двоичная форма. Если вы думаете об архивации, то при взломе этих файлов ASCII, скорее всего, будут получены самые маленькие файлы, которые вы можете получить.

Тем не менее, Paraview считывает формат VTU, который имеет сжатую двоичную форму (на основе XML, но данные сначала сжимаются libz, а затем снова кодируются для получения текста ASCII). На типичных файлах это экономит в 4-10 раз. Для больших файлов это определенно способ.

Вольфганг Бангерт
источник
2
Я проголосовал за это за контраст с другим ответом. У меня нет сильного мнения в любом случае, но здесь есть хороший момент.
Билл Барт
В качестве альтернативы явно обнулите младшие биты и сожмите двоичный файл.
Джед Браун
Ничего себе, это потребовало бы немного возни. Или есть функции, которые делают это? (За исключением того, чтобы бросить, чтобы плавать и вернуться к удвоению.)
Вольфганг Бангерт