许多反序列化API都采用流,并且在流到达流末之前,如果它们经过序列化对象的末尾,则会读取流的末尾并出错。
在我的流中,我按顺序序列化了几个对象。然后,我想稍后将它们从该流中反序列化。我知道每个对象的长度,并且可以告诉他们,如果采用这样的参数,则读取流的距离为多远,但事实并非如此。

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

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

提示:我在这里故意谈论流,而不是内存缓冲区。我知道我可以从流中读取x个字节,然后基于MemoryStream进行编码,但是我不能认为整个流都可以一次放入内存中。

最佳答案

不,BCL中没有此类。

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

09-06 08:58