TMemroyStream重点问题
想使用Stream进行Socket开发,在用到TMemroyStream一直不能走出阴影,求解!!
就拿sting做例子,本意是想将2个string进行合并使用流的方式,可总不能达到预期效果,看代码:
procedure TForm1.Button1Click(Sender: TObject);
var
size: Integer;
s1, s2, s3: string;
m1, m2: TMemoryStream;
begin
m1 := TMemoryStream.Create;
m2 := TMemoryStream.Create;
size := 5;
s1 := 'ABCDE'; s2 := '12345'; s3 := '';
m1.WriteBuffer(s1, size);
m2.WriteBuffer(s2, size);
m1.Seek(0,soFromEnd);
m2.Seek(0,soFromBeginning);
m1.CopyFrom(m2, m2.Size);
m1.Seek(0, soFromBeginning);
m1.ReadBuffer(s3,m1.Size);
ShowMessage(s3);
m2.Clear;
m1.Clear;
m2.Free;
m1.Free;
end;
其结果是ABCDE而不是我想要的ABCDE12345,并且还会包内存错误!
[解决办法]
string的内容是从string[1]开始的,所以要
m1.WriteBuffer(s1[1], size);
另外,流是自己可以拼接的
m1.WriteBuffer(s1[1], size);
m1.WriteBuffer(s2[1], size);
就可以完成你那一大堆代码所做的事了,没必要弄两个流对象