我有一个接口定义为:可以将流传递给多个方法吗?
public interface IClientFileImporter
{
bool CanImport(Stream stream);
int Import(Stream stream);
}
的想法是采取任何文件流,并通过一系列这个接口的实现的运行它来确定哪一个应该处理该文件。一些实现可能会寻找一定的标题行,而其他人可能会寻找一定的字节序列,等等
我的问题是,是否确定,只要通过周围流这样的,因为我从来没有关闭它?每种方法都必须负责将流重置为位置0(如有必要),但还有其他潜在问题(除了线程安全性)吗?这个代码真的很气味,国际海事组织,但我不知道有一个更好的方法来做到这一点。
我认为这不是一个坏概念。您不知道流中需要哪些实现,因此提供整个流是有意义的。为了确保实现不会混淆流,你可以实现某种类型的包装(从流本身派生),该包装禁止修改底层流或任何你需要的任何方法。另外,我不需要实现来重置流的位置。 CanImport/Import的调用者可以做到这一点。综合这可以确保没有importorr可以伤害基础流。 – 2012-02-28 20:41:17