При выполнении компьютерного моделирования систем с n
(например, 10000) частицами обычный рабочий процесс включает частое сохранение состояния системы через заданные интервалы. Это повлечет за собой запись в файл координат положения всех частиц (таким образом, 3 числа с плавающей запятой / каждая на строку, каждая строка для частицы), с некоторой информацией заголовка. Плавающая точность установлена на фиксированное значение.
Обычно я сохраняю / записываю свои файлы конфигурации следующим образом (часть функции, которая создает файл при каждом вызове):
#include <iostream>
#include <fstream>
ofstream outfile(filelabel, ios::out);
outfile.precision(10);
outfile << "#Number of particles " << npart << endl;
for (int i=0; i<npart; i++){
outfile << particle[i].pos[0] << " " << particle[i].pos[1] << " " << particle[i].pos[2] << endl;
}
outfile.close();
Как правило, каждый такой файл для достаточно большой системы имеет размер 0,5–4 МБ, поэтому при частом его сохранении они в конце концов увеличиваются до большого размера. Поэтому я пытаюсь узнать, как можно оптимизировать размер моих файлов конфигурации до минимума, например, с помощью (2 мысли, которые приходят на ум):
- Используя другой метод написания, а неОбязательно записывать файлы .txt.
- Возможно сжатие (например, сжатие) данных перед записью в файл.
Буду очень признателен за любые предложения и рекомендации о том, как я могу уменьшить размер файлов конфигурации в рамках возможностей C / C ++.
Небольшое добавление
В соответствии с предложениями на данный момент двоичный формат для сохранения представляется очень хорошим альтернативным подходом, однако, в качестве следующеговопрос, можно ли будет прочитать такие двоичные сохраненные данные в Python, например?
Это актуально, поскольку, учитывая сохраненные файлы конфигурации, я склонен использовать Python для своих целей после анализа.