TMemoryStream的问题(50分)

  • 主题发起人 主题发起人 MAGXJ500T
  • 开始时间 开始时间
M

MAGXJ500T

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的代码我将一个字符串写入一个TMemoryStream中,然后再读出来。
var
Stream : TMemoryStream;
Str : String;
iLen : Integer;
b : TBytes;
begin
Stream := TMemoryStream.Create;
try
//写
Str := '你好';
iLen := Length(Str);
Stream.WriteBuffer(iLen , SizeOf(iLen));
Stream.WriteBuffer(Str, iLen);

//读
Stream.Position := 0;
Stream.ReadBuffer(iLen, SizeOf(iLen));
SetLength(Str, iLen);
Stream.ReadBuffer(Str, iLen);

//显示
ShowMessage(Str);
finally
Stream.Free;
end;
end;

但是如果我开始Str = '1',则出错。后来我发现只要字符串长度小于
或等于2都会出现这个问题,请高手指点!
 
自己搞定,我真白痴!
正确代码如下:
Stream.WriteBuffer(Str[1], iLen);
Stream.ReadBuffer(Str[1], iLen);
 
这么晚都早,好辛苦。
//来混分的。
 
MAGXJ500T兄:
Stream.WriteBuffer(Str, iLen);
与 Stream.WriteBuffer(Str[1], iLen);有何不同

如此写法要何解?
 
var
Stream : TMemoryStream;
Str : String;
iLen : Integer;
b : TBytes;
begin
Stream := TMemoryStream.Create;
try
//写
Str := '你好';
iLen := Length(Str);
Stream.WriteBuffer(iLen , SizeOf(iLen));
Stream.WriteBuffer(Str, iLen);

//读
Stream.Position := 0;
Stream.ReadBuffer(iLen, SizeOf(iLen));
[blue] //SetLength(Str, iLen);把这个语句去掉就OK了,连空字符串也没问题[/blue]
Stream.ReadBuffer(Str, iLen);

//显示
ShowMessage(Str);
finally
Stream.Free;
end;
end;
 
后退
顶部