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
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
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