The basics of streaming go something like this:-

Code:
var
 myFileStream : TFileStream;
begin
 myFileStream:=TFileStream.create('C:\MyFile.dat',fmCreate);
 myFileStream.writeInteger(intData1);
 myFileStream.writeString(strData1);
 myFileStream.free;
end;
To read the data back, you then do something like this:-

Code:
var
 myFileStream : TFileStream;
begin
 myFileStream:=TFileStream.create('C:\MyFile.dat',fmOpenRead);
 intData1:=myFileStream.readInteger;
 strData1:=myFileStream.readString;
 myFileStream.free;
end;
The really good thing about streams is that if you have your load and save methods encapsulated as procedures that take the stream as a parameter like this:-

Code:
procedure saveMyData(dst:TStream);
You can save the data to a TMemoryStream, TStringStream (any descendant of TStream)... this then allows you to do things like stream the data over a TCP/IP connection for example.

My one bit of advice would be to include versioning information in the stream, so that when you change the data you are storing, you can read the version and then decide how handle it. I know, IIRC, chebmaster has made his persistency system available... whether its appropriate for what you want, only you can decide. I personally favour a more simplistic approach that uses dynamic method calls, to read the version information and then call a method to handle that particular version.

If you want more information on this, let me know and I'll post something.

Hope this helps.