C# 基于较长的流创建具有固定长度的流

C# 基于较长的流创建具有固定长度的流,c#,serialization,stream,C#,Serialization,Stream,许多反序列化API接受流,并将读取到流的结尾,如果它们在到达流的结尾之前运行过序列化对象的结尾,则会出错。 在我的流中,我按顺序序列化了几个对象。然后我想稍后从该流中反序列化它们。我知道每个对象的长度,如果他们接受这样的参数,我可以告诉他们读取流的距离,但他们没有 我想我可以通过创建一个“子流”来解决这个问题,该“子流”将较长的流作为构造函数的第一个参数以及长度,然后子流将声明位于末尾,这将导致反序列化程序终止,父流将正确定位以开始反序列化下一个对象 所以我的问题是,BCL中是否已经有一个类支持

许多反序列化API接受流,并将读取到流的结尾,如果它们在到达流的结尾之前运行过序列化对象的结尾,则会出错。 在我的流中,我按顺序序列化了几个对象。然后我想稍后从该流中反序列化它们。我知道每个对象的长度,如果他们接受这样的参数,我可以告诉他们读取流的距离,但他们没有

我想我可以通过创建一个“子流”来解决这个问题,该“子流”将较长的流作为构造函数的第一个参数以及长度,然后子流将声明位于末尾,这将导致反序列化程序终止,父流将正确定位以开始反序列化下一个对象

所以我的问题是,BCL中是否已经有一个类支持这一点,或者是否有人有这样一个自定义流的示例


提示:我在这里故意谈论流,而不是内存缓冲区。我知道我可以从一个流中读取x字节,然后根据它创建一个
内存流,但我不能假设整个流可以一次装入内存。

不,BCL中没有这样的类

如果您只需要同步读取操作,那么编写代码非常简单—从
Stream
派生并实现
read
,通过正确的边界检查重定向到内部流。如果代码中使用了
CanSeek
/
Length
属性和
ReadByte
,则可能需要实现