Кто должен нести ответственность за закрытие потока

Я пишу приложение, которое создает «Каталог» файлов, которые можно отнести к другим файлам метаданных, таким как вложения и эскизы.

Я' m пытается абстрагировать интерфейс к каталогу до такой степени, что потребителю каталога не нужно знать о базовой файловой системе, используемой для хранения файлов. Итак, я создал интерфейс под названием IFileSystemAdaptor , который показан ниже.

public interface IFileSystemAdaptor:IDisposable
{
    void WriteFileData(string fileName, Stream data);
    Stream ReadFileData(string filename);
    void DeleteFileData(string filename);
    void ClearAllData();
    void WriteMetaFileData(string filename, string path, Stream data);
    Stream ReadMetaFileData(string filename, string path);
    void DeleteMetaFileData(string filename, string path);
    void ClearMetaFilesData(string filename);
}

По сути, мой интерфейс IFileSystemAdaptor предоставляет плоский список файлов, который также может быть связан с дополнительными файлами метаданных.

Как и вы. Как видите, я использую ссылки на общие объекты Stream , чтобы абстрагировать интерфейс к данным файла. Таким образом, одна реализация каталога может возвращать файлы с жесткого диска, а другая - данные с веб-сервера.

Теперь я пытаюсь понять, как не дать моей программе оставить потоки открытыми. Есть ли практическое правило, какие участники должны закрывать потоки? Если потребитель потока закроет его, или если участник, создавший поток, должен быть ответственным за его закрытие.

10
задан Harry Johnston 2 May 2014 в 01:29
поделиться