.Net从流中读取流段

时间:2010-06-29 14:41:44

标签: .net stream

我正试图找到一种方法来读取部分流。我有一个40000字节的流,需要只读取位置8000到15000,可能很容易,但我似乎找不到一个简单的方法来获得流段。

2 个答案:

答案 0 :(得分:2)

如果流支持搜索,您可以跳到该位置,否则您必须阅读流才能到达该位置:

if (theStream.CanSeek) {
  theStream.Seek(8000, SeekOrigin.Current);
} else {
  // read 8000 bytes and throw away
}
// read the 7000 bytes to keep

答案 1 :(得分:-1)

由于读取流的一部分应该很容易,我假设你实际上需要一个只访问底层流的给定段的新Stream对象。

即。你想要这样的东西:

Stream segment = new StreamSegment(underlyingStream, 8000, 7000);

我有这样的课程,你可以在这里找到它:LVK.IO.PartialStream。它依赖于我的类库中的其他类,特别是LVK.IO.WrapperStream,但你可以在那里找到它,只需抓住你实际需要的几个文件(如果你决定使用它们。)

要使用它,您必须指定PartialStream对象是否拥有基础流。如果是这样,当你处理PartialStream对象时,它也会处理底层流。

所以对于上面的例子:

Stream segment = new PartialStream(underlyingStream, false, 8000, 7000);

假设它不应拥有基础流(或将true作为第二个参数传递。)

注意:

  • 构造上面的PartialStream对象会将基础流重新定位到该段的开头(上例中的位置8000)。
  • 在使用部分流对象时,不应使用基础流,因为有一些内部簿记与段内的位置相关。如果重新定位基础流而不通过部分流,则行为未定义。