将流传递给多个方法可以吗?

Chr*_*ris 11 c#

我有一个接口定义为:

public interface IClientFileImporter
{
    bool CanImport(Stream stream);
    int Import(Stream stream);
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是获取任何文件流并通过此接口的一系列实现来运行它,以确定哪个文件流应该处理该文件.一些实现可能寻找某个标题行,而其他实现可能寻找某个字节序列等...

我的问题是,只要我从不关闭它就可以传递这样的流吗?如有必要,每种方法都必须负责将流重置到位置0,但是还有其他潜在的问题(除了线程安全)吗?这段代码真的闻起来,IMO,但我不确定一个更好的方法来做到这一点.

And*_*ker 4

为了防止底层流被修改,请创建一个派生自 Stream 的包装器流,并仅将安全调用转发到包装的流。另外,不要假设 Import/CanImport 方法会重置流位置。这些方法的调用者应将流重置为有效状态,然后再将其传递给 Import/CanImport。