Вы можете использовать массив записей с простой строкой, а затем сохранить их в поток с помощью нашей обертки TDynArray.
Он будет использовать меньше места, чем короткие строки, потому что он будет писать только символы, используемые строкой. Например, sEmployer, определенный как строка [100], всегда будет использовать 101 байт при непосредственном сохранении. Принимая во внимание, что с нашим TDynArray, он будет использовать только число символов плюс один.
Работает с Delphi 6 до XE.
type
TPerson = packed record
sCountry: string;
sFullName: string;
sAddress: string;
sCity: string;
sEmployer: string;
end;
TPersons = array of TPerson;
var
MyPeople: TPersons;
(...)
procedure SavePeopleToStream(Stream: TMemoryStream);
begin
DynArray(TypeInfo(TPersons),MyPeople).SaveToStream(Stream);
end;
У вас есть обратный метод LoadFromStream и многое другое в TDynArray.
Смотрите эту запись в блоге, чтобы получить эту оболочку .
Дополнительное примечание: Забавно, это та же самая функция Я собираюсь добавить к нашему ORM : хранить содержимое динамического массива в поле BLOB, закодированном в двоичном виде. Но в нашем случае все будет автоматизировано благодаря Delphi RTTI. Также существует уровень клиент / сервер, использующий JSON для передачи, чтобы сделать его более совместимым с n-Tier.