Ну, тут завист от того, как храняться данные в потоке.
Пусть у нас есть запись:
	Код:
	type
  TCustomData = record
    Flight : Integer;
    Name : String[100];
    BaggageNb : Integer;
    BaggageWWt : Integer;
  end;
  PCustomData = ^TCustomData; 
Тогда читаем из потока:
	Код:
	function ReadData(AStream : TStream) : TList;
var
  cd : PCustomData;
begin
  Result := TList.Create;
  AStreem.Seek(0,soFromBeginning);
  While Not(AStream.EndOfStream) Do
    Begin
      New(cd);
      AStream.ReadBuffer(cd,SizeOf(TCustomData));
      Result.Add(cd);
    End;
end; 
А с последним вопросом - я не совсем понимаю что нужно то...