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

时间:2013-10-11 02:57:08

标签: c# serialization stream

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

我想我可以通过创建一个“子流”来解决这个问题,该子流将较长的流作为其构造函数的第一个参数以及一个长度,之后子流将声称处于结束状态,这将是导致反序列化器终止,并且正确定位父流以开始反序列化下一个对象。

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

提示:我故意在这里讨论流,而不是内存缓冲区。我知道我可以从流中读出x个字节,然后在其上建立MemoryStream,但我不能假设整个流一次都适合内存。

1 个答案:

答案 0 :(得分:2)

BCL中没有这样的课程。

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