потоковые адаптеры в Stream Architecture - PullRequest
0 голосов
/ 09 июля 2019

Ниже приведена картинка из C # 7.0 в двух словах: enter image description here

Q1 - из рисунка можно сделать вывод, что только резервные потоки хранилища, например FileStream может «подключаться» к файлам напрямую, но разве мы не можем использовать StreamReader / StreamWriter для чтения / записи в файл напрямую?

Q2-Книга также говорит:

Адаптер оборачивает поток, как декоратор. Однако, в отличие от декоратора, адаптер сам по себе не является потоком; обычно он полностью скрывает байтовые методы

Но разве StreamReader / StreamWriter и т. Д. Не помечены как потоковые адаптеры на рисунке? как их можно назвать «потоковым адаптером», если они не считаются потоками?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

как их можно назвать «потоковым адаптером», если они не считаются потоками

Точно так же, как подстаканник нельзя считать чашкой.

разве мы не можем использовать StreamReader / StreamWriter для непосредственного чтения / записи в файл?

StreamWriter / Reader использует Stream для внутреннего использования.
Из исходного кода: https://github.com/microsoft/referencesource/blob/master/mscorlib/system/io/streamwriter.cs#L192

0 голосов
/ 09 июля 2019

Q1

Только потоки резервного хранилища подключаются напрямую к конкретному ресурсу ввода-вывода.Вы используете MemoryStream для чтения / записи потока данных в память.StreamWriter использует a, например MemoryStream для достижения этой цели.Таким образом, он не имеет прямого доступа к ресурсам ввода / вывода.При создании экземпляра любого типа потокового адаптера (например, StreamWriter) вы должны передать поток резервного хранилища конструктору (например, new StreamWriter(new MemoryStream())), который поток адаптера затем использует для чтения / записи из / в конкретный ресурс.Таким образом, доступ StreamWriter к файлу или памяти является косвенным.Операции чтения / записи делегируются базовому потоку резервного хранилища.
Соглашение об именах также выражает эту связь.Это поток Reader , а не ReadableStream.Он читает из потока.Это XML Writer , а не XmlStream (или FileStream).

Q2

Адаптер соединяет два несовместимых интерфейса или модуля.На графике ясно видно, что задачей потокового адаптера является подключение, например, простого текста, XML к объекту потока на основе представления байтов.Адаптер скрывает детали основного потока для потребителя.Это позволяет, например, использовать StreamWriter для записи простого string в Stream более удобным способом, не заботясь о реальном представлении байтов (сам поток знает только байты).Адаптер знает, как преобразовать несовместимые данные, чтобы сделать их совместимыми.Это природа адаптера.Поскольку он соединяет поток / несовместимый ввод / вывод данных с реальным потоком, он называется «Адаптер потока».Он адаптируется к потоку.

Декоратор расширяет поведение декорируемого объекта.Он реализует базовый тип декорированного объекта и оборачивает фактическую реализацию, чтобы расширить его поведение.Это позволяет добавлять функции к существующему объекту, не нарушая принцип Open Closed.Поэтому, когда обернутый (декорированный) объект расширяется (модифицируется), тогда обертывающий (декорирующий) объект защищен от модификации.

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

Оба Потоковых адаптера и Потоковые декораторы являются реализациями шаблонов проектирования: Шаблон адаптера и Шаблон декоратора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...