我做了一个小程序,实现将记录类型保存到流中,在把它分析成记录类型,可却发现不行,大家看看程序
procedure TForm1.Button1Click(Sender: TObject);
var
Per:TPerson;
Stream:TStream;
begin
Per.Name:='sjb';
Per.Age:=22;
Per.Sex:=True;
Stream:=TMemoryStream.Create;
Stream.Write(Per,Sizeof(Per));
Stream.Position:=0;
Memo1.Lines.LoadFromStream(Stream);
Showmessage(inttostr(Stream.Size)); //些处显示的是 12
Stream.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
Per:TPerson;
Stream:TStream;
S:integer;
begin
Stream:=TMemoryStream.Create;
Memo1.Lines.SaveToStream(Stream);
Stream.Position:=0;
Stream.Read(Per,Sizeof(Per));
Showmessage(inttostr(Stream.Size)); //些处显示的是 3
if Per.Sex then
S:=3
else
s:=4;
ShowMessage('Name:'+Per.Name+#13+'Age:'+IntToStr(Per.Age)+#13+'Sex:'+Inttostr(s));
Stream.Free;
end;
在最近显示的结果和原来的数据也不一样呀,差Age这,看它们的大小,差了8,不知道这8个字节的流丢哪去了,
大家帮忙看一下
procedure TForm1.Button1Click(Sender: TObject);
var
Per:TPerson;
Stream:TStream;
begin
Per.Name:='sjb';
Per.Age:=22;
Per.Sex:=True;
Stream:=TMemoryStream.Create;
Stream.Write(Per,Sizeof(Per));
Stream.Position:=0;
Memo1.Lines.LoadFromStream(Stream);
Showmessage(inttostr(Stream.Size)); //些处显示的是 12
Stream.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
Per:TPerson;
Stream:TStream;
S:integer;
begin
Stream:=TMemoryStream.Create;
Memo1.Lines.SaveToStream(Stream);
Stream.Position:=0;
Stream.Read(Per,Sizeof(Per));
Showmessage(inttostr(Stream.Size)); //些处显示的是 3
if Per.Sex then
S:=3
else
s:=4;
ShowMessage('Name:'+Per.Name+#13+'Age:'+IntToStr(Per.Age)+#13+'Sex:'+Inttostr(s));
Stream.Free;
end;
在最近显示的结果和原来的数据也不一样呀,差Age这,看它们的大小,差了8,不知道这8个字节的流丢哪去了,
大家帮忙看一下
这是以二进制的格式解释流> Memo1.Lines.LoadFromStream(Stream);
这是以正文格式解释流。对流的解释不一致。
Per.Age:=22;
Per.Sex:=True;转成字符型? 这样memo又何可以读出再写入stream.这样写入的就是字符串了。
又怎么转为int & boolean 啊?