var
  mStream : TStreamMemory;
  bytVal1,bytVal2 : array[0..5]of byte;
  i :integer;
begin
  for i:=0 to 5 do
  begin
    bytVal1[i] := 90+i;
  end;
  fillchar(bytVal2,Sizeof(bytVal2),0); 
  mStream :=  TStreamMemory.Create();
  mStream.Position :=0;
  mStream.WriteBuffer(bytVal1[0],length(byteval1));
  mStream.Read(bytVal2[0],mStream.Size);
end;
//上面这个例子,出现的问题是:将数组1的数据写入流中,数据流的大小变为6,但读出数据到数据2确一个数据也没有填充进去。是不是写入没成功,如果没成功数据流大小为什么会是数据1的长度。delphi

解决方案 »

  1.   

    读之前再一次mStream.Position :=0; 
      

  2.   

    问下你,Write和WriteBuffer,Read和ReadBuffer你区别.不是说WriteBuffer和ReadBuffer可以在某个位置开始插入或读取,因此这两个需要配合Position。怎么Read也需要,它不是将流中所有数据读出吗
      

  3.   

    最后一句写数据2之前,请内存流的position:=0加上
      

  4.   

    谁跟你说的,有源码为啥不自己看
    ReadBuffer的源码,其中也只是调用了Read,不过给包装了个异常
    procedure TStream.ReadBuffer(var Buffer; Count: Longint);
    begin
      // 直接调用Read,读取count大小数据,读取后如果数据大小不一致就抛出个异常
      if (Count <> 0) and (Read(Buffer, Count) <> Count) then
        raise EReadError.CreateRes(@SReadError);
    end;往流中写入或读出一个字节,postion都+1,读写完成后,postion就停在最后的位置,你得自己把postion还原到你希望的位置。这个数组是一个道理,只不过数组名即是指向首元素,而流的读写直接找postion