关于delphi中TStreamMemory 将byte数组写入流中和把流中数据写入byte数组中

SR632119722 2013-09-09 05:12:51
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的长度。
...全文
1502 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sololie 2013-09-09
  • 打赏
  • 举报
回复
谁跟你说的,有源码为啥不自己看 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
zzn007 2013-09-09
  • 打赏
  • 举报
回复
最后一句写数据2之前,请内存流的position:=0加上
SR632119722 2013-09-09
  • 打赏
  • 举报
回复
问下你,Write和WriteBuffer,Read和ReadBuffer你区别.不是说WriteBuffer和ReadBuffer可以在某个位置开始插入或读取,因此这两个需要配合Position。怎么Read也需要,它不是将流中所有数据读出吗
sololie 2013-09-09
  • 打赏
  • 举报
回复
读之前再一次mStream.Position :=0;

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧