delphi TMemoryStream到字节数组

cu6pst1q  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(447)

我试图从TMemoryStream中获取一个字节数组。我很难理解内存流是如何工作的。据我所知,我应该能够使用PositionSize属性循环访问MemoryStream。
我的预期结果是填充一个通过内存流循环的字节数组,但是当调整内存流的Position属性时,它从示例0跳到2,然后从2跳到6。

Data.Position := 0;
repeat
   SetLength(arrBytes, Length(arrBytes) + 1);

   Data.Read(arrBytes[High(arrBytes)], Data.Size);

   Data.Position := Data.Position + 1;
until (Data.Position >= Data.Size -1);

上面的代码会导致部分数据,或者在某些情况下根本没有数据。

holgip5t

holgip5t1#

当从TMemoryStream或任何其他流阅读数据时,位置会自动前进读取的字节数。
来自TMemoryStream.Read文档
将内存流中最多Count个字节读入Buffer,并将流的当前位置前移读取的字节数。
因此,如果您按顺序从TMemoryStream阅读数据,则无需自行更改存储器位置,因为它是自动完成的。

相关问题