读书人

TMemroyStream重点有关问题

发布时间: 2012-02-12 17:16:33 作者: rapoo

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);
就可以完成你那一大堆代码所做的事了,没必要弄两个流对象

读书人网 >.NET

热点推荐