序列化 / 二进制格式

uses System.Classes;

type
  TInfo = class(TPersistent)
  private
    FId: Integer;
    FName: string;
  published
    property Id: Integer read FId write FId;
    property Name: string
      read FName write FName;
  end;

  TData = class(TComponent)
  private
    FText: string;
    FInfo: TInfo;
  public
    constructor Create(
      AOwner: TComponent); override;
  published
    property Text: string
      read FText write FText;
    //nested TPersistent streams too
    property Info: TInfo read FInfo;
  end;

constructor TData.Create(AOwner: TComponent);
begin
  inherited;
  FInfo := TInfo.Create;
end;

var
  Data: TData;
  Stream: TMemoryStream;
begin
  Data := TData.Create(nil);
  Data.Text := 'Hello';
  Data.Info.Id := 1;
  Data.Info.Name := 'first';

  Stream := TMemoryStream.Create;
  Stream.WriteComponent(Data);

  WriteLn('size is ', Stream.Size);
end.