我试图从TMemoryStream中获取一个字节数组。我很难理解内存流是如何工作的。据我所知,我应该能够使用Position
和Size
属性循环访问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);
上面的代码会导致部分数据,或者在某些情况下根本没有数据。
1条答案
按热度按时间holgip5t1#
当从
TMemoryStream
或任何其他流阅读数据时,位置会自动前进读取的字节数。来自TMemoryStream.Read文档
将内存流中最多Count个字节读入Buffer,并将流的当前位置前移读取的字节数。
因此,如果您按顺序从
TMemoryStream
阅读数据,则无需自行更改存储器位置,因为它是自动完成的。