.Net StreamWriter.BaseStream, что означает это определение?«Получает основной поток, который взаимодействует с резервным хранилищем». - PullRequest
3 голосов
/ 11 января 2011

Сегодня я читал о StreamWriter и наткнулся на это свойство, BaseStream.

Я искал определение и нашел это

"Получает основной поток, который взаимодействует с резервным хранилищем."

отсюда MSDN - StreamWriter.BaseStream

Я понимаю, что такое BaseStream для StreamReader, потому что его определение очень просто:

Возвращает базовый поток.

Но что означает определение StreamWriter.BaseStream ?? Или, если быть более понятным, что означает эта часть определения «взаимодействие с резервным хранилищем»? Это звучит как бред для меня.

Ответы [ 3 ]

2 голосов
/ 11 января 2011

Ты прав; это кажется излишне многословным, особенно по сравнению с аналогичным StreamReader.BaseStream. В действительности, он просто возвращает ссылку на базовый поток, точно так же, как StreamReader.

Я полагаю, что предположение описания состоит в том, что запись в базовый поток потребует сохранения записанных данных в каком-либо постоянном хранилище, например в файле. Конечно, в действительности это вообще не нужно (в худшем случае это может просто ничего не делать).

Если вы действительно хотели экстраполировать, вы могли бы интерпретировать это как означающее, что свойство CanWrite нижележащего потока равно true (по крайней мере, в точке, к которой оно было присоединено к StreamWriter).


Чтобы убедиться, что он действительно просто возвращает базовый поток, вот декомпилированный код из Reflector:

public virtual Stream BaseStream
{
    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    get
    {
        return this.stream;
    }
}

где поле stream назначено в методе Init:

private void Init(Stream stream, Encoding encoding, int bufferSize)
{
    this.stream = stream;
   ...

который в свою очередь вызывается конструктором с аргументом присоединенный поток:

[SecuritySafeCritical]
public StreamWriter(Stream stream, Encoding encoding, int bufferSize) 
  : base(null)
{
    ...
    this.Init(stream, encoding, bufferSize);
}

2 голосов
/ 11 января 2011

Итак, общее определение Stream таково:

Предоставляет общий вид последовательности байтов.

и StreamWriter:

Реализует TextWriter для записи символы в поток в определенном кодирование.

Таким образом, свойство BaseStream - это место, куда будут записываться символы. Это может быть FileStream или MemoryStream или что-то еще, что реализует Stream. Я чувствую, что лучшее описание будет:

Получает основной поток.

0 голосов
/ 11 января 2011

Я думаю, что это когда вы "daisychain" потоков.

Например, ваш код записывает в поток A, который записывает в поток B, который записывает в поток C, который записывает на диск.

Основным потоком потока A в этом случае является B.

...