想使用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,并且还会包内存错误!

解决方案 »

  1.   

    string的内容是从string[1]开始的,所以要
    m1.WriteBuffer(s1[1], size);另外,流是自己可以拼接的
    m1.WriteBuffer(s1[1], size);
    m1.WriteBuffer(s2[1], size);
    就可以完成你那一大堆代码所做的事了,没必要弄两个流对象
     
      

  2.   

    m1.ReadBuffer(s3,m1.Size);
    这里你的s3没有分配内存,要先setlength(s3,10); 否则肯定会报内存错误而且同样要改成
    m1.ReadBuffer(s3[1],m1.Size);
     
      

  3.   

    果然是大神,GOOGLE搜了半天都没找到原因,我QQ1579298173,不介意的话加个朋友,我们好交流