我有一個接口定義爲:可以將流傳遞給多個方法嗎?
public interface IClientFileImporter
{
bool CanImport(Stream stream);
int Import(Stream stream);
}
的想法是採取任何文件流,並通過一系列這個接口的實現的運行它來確定哪一個應該處理該文件。一些實現可能會尋找一定的標題行,而其他人可能會尋找一定的字節序列,等等
我的問題是,是否確定,只要通過周圍流這樣的,因爲我從來沒有關閉它?每種方法都必須負責將流重置爲位置0(如有必要),但還有其他潛在問題(除了線程安全性)嗎?這個代碼真的很氣味,國際海事組織,但我不知道有一個更好的方法來做到這一點。
我認爲這不是一個壞概念。您不知道流中需要哪些實現,因此提供整個流是有意義的。爲了確保實現不會混淆流,你可以實現某種類型的包裝(從流本身派生),該包裝禁止修改底層流或任何你需要的任何方法。另外,我不需要實現來重置流的位置。 CanImport/Import的調用者可以做到這一點。綜合這可以確保沒有importorr可以傷害基礎流。 – 2012-02-28 20:41:17