如何从TStringStream中读取部分数据,从流中释放读取的数据并保留其余的(未读取的数据)



我想做的是:假设我有一个TStringStream,它只读取一个有100个字符的字符串。如果我调用。readstring(50),我将得到这个流的前50个字符,并且它的游标将被放置在位置51上。

我的问题是:我如何在这个流中以快速和干净的方式抛出字符1到50 ?我想稍后再读剩下的(51到100)。

你不能做你希望做的事。字符串流的数据是Delphi字符串,存储在单个内存块中。内存块是原子的,它们不能被分割。您无法释放内存块的某些部分。

如果你真的需要将内存返回给内存管理器,那么你应该创建一个新的字符串,删除已经处理过的数据。然后,你可以用这个新的输入重新创建字符串流,并销毁之前的字符串流。

话虽这么说,但除了增加内存碎片之外,很难看出这做了什么。如果涉及的内存足够大,并且字符串流持续的时间足够长,那么这可能是一种明智的方法。否则,它听起来像是在尝试优化,实际上会阻碍性能。

也许其他类比字符串流更合适,但在不了解更多细节的情况下很难给出建议。

你不能这么做。如果您确实需要这样做,您应该编写自己的类来实现流接口,它将允许您每次处理一些数据并释放您想要释放的任何数据。注意,您只能浏览数据一次,因为您现在已经删除了数据。也就是说,重新寻找开始将变得不可能,并且您当前的流"位置"将是一个谎言。

总之,听起来你很困惑。

如果我理解正确,你在流中跳过哪一个?

你可以这样做:

  Str.Position := Str.Position + 50;

或者像这样:

  Str.Seek(50,TSeekOrigin.soCurrent);

相关内容

  • 没有找到相关文章

最新更新