В основном ваш формат 9i3
означает, что каждое число занимает в файле ровно 3 байта.Это 27 байтов, плюс один для возврата каретки составляет 28.
Но вы можете хранить в этом формате только номера до 999, и даже тогда числа свыше 99 будут смешиваться вместе.
Прямой доступхранит двоичное представление целых чисел, таким образом, 32 бита или 4 байта на число.Всего 36 байтов.Это больше, чем 28 вашей отформатированной версии, но она может работать со всеми целыми числами, до 2 147 483 647 и до -2 147 483 648, оставаясь при этом того же размера.(Если вам нужна такая же гибкость в отформатированной версии, вам потребуется формат 9I11
для общего объема в 100 байт).
Неформатированная версия немного посередине, она все еще хранит некоторые метаданные, то естьпочему он немного больше, чем прямой доступ, но, как и прямой доступ, вы можете хранить все целые числа таким образом, занимая одинаковое количество места.
Что касается вашего второго вопроса, то, что вы должны использовать, зависит отмного вещей.Как вы заметили, если ваши целые числа всегда между 0 и 99, то их строковое представление меньше, чем их двоичное представление.Но если вам нужно 4 цифры (включая знак), двоичное представление становится меньше.Я, вероятно, также должен указать, что если ваши числа невелики, вы можете также объявить их как 8- или 16-битные целые числа, что будет означать, что они занимают только один или два байта соответственно.
Двоичное представлениетакже быстрее, так как числа не нужно преобразовывать между двоичным и строковым.
Но для размеров, о которых вы говорите, может оказаться полезным изучить другие форматы файлов, например NetCDF , который имеет несколько методов сжатия данных.