Вам нужен так называемый механизм «сериализации».
1.Стандартный способ
1.1 SaveToStream
В Delphi мы обычно реализуем метод SaveToStream
, который сохраняет содержимое каждого объекта в месте назначения TStream
(либо TFileStream
, либо TMemoryStream
).
Вам нужно будет написать сериализацию вручную.
1.2 DFM-подобная потоковая передача
См. TWriter
/ TReader
классы.
Если вы определили свои данные в опубликованных свойствах, вы можете сериализовать их, используя этистандартные классы Delphi.
Для некоторых методов, способных сериализовать любой TCollection
контент JSON и от него, см. эту статью блога .
2.RTTI
См., Например, этот вопрос SO .
В частности, новый расширенный RTTI (доступен с Delphi 2010) открывает новые возможности для сериализации.
3.Используйте записи вместо классов
Если каждый элемент не хранит много содержимого (некоторое целое число / логическое значение), может иметь смысл использовать записи вместо объектов.Для скорости и потребления / фрагментации памяти это может стоить.
Вот некоторая оболочка, способная сериализовать любой динамический массив , даже содержащий вложенные записи или динамические массивы.
4.Используйте ядро базы данных
Возможно, лучшим подходом является не зацикливание ваших данных в не развивающейся двоичной форме, проприетарной для вашего приложения.Если вы хотите добавить свойство, вам придется управлять им вручную.Или, если вы хотите получить доступ к вашим данным из других приложений, это может быть затруднено.
Существует множество решений для баз данных - вместо использования внешней базы данных (например, MS SQL, FireBird или Oracle), это можетХорошей идеей будет встроить базу данных в ваше приложение (намного проще в установке).Стоит упомянуть SQLite с множеством оберток , включая нашу версию (которая позволит вам перейти на любую другую базу данных, если вы хотите использовать MS SQL илиOracle вместо).
У вас есть другие решения - см. этот вопрос SO - и, если вам нужна производительность, взгляните на нашу библиотеку Big Table .