我正试图找到一种方法来读取部分流。我有一个40000字节的流,需要只读取位置8000到15000,可能很容易,但我似乎找不到一个简单的方法来获得流段。
答案 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
作为第二个参数传递。)
注意: