Ответ 1
Преимущество NetworkStream
происходит в первую очередь из-за того, что это Stream
. Недостатком Socket
является то, что общий код, который читает и записывает из абстрактных источников ввода-вывода, таких как Stream
, не может обрабатывать Socket
.
Основным вариантом использования NetworkStream
является то, что у вас есть код в другом месте, который читает или записывает с Stream
, и вы хотите использовать его с помощью Socket
. Вы бы знали, были ли в этой ситуации, а затем NetworkStream
будет большой помощью!
Скажем, например, у вас была библиотека связи, и вы поддерживали сериализацию сообщений из файлов, именованных каналов и TCP/IP. Идеальным выбором для класса ввода-вывода будет Stream
. Тогда ваши методы сериализации могут принимать FileStream
, a PipeStream
или NetworkStream
. Он даже принял бы MemoryStream
. Это преимущество абстракции, потому что после того, как мы создали поток, метод может взаимодействовать с ним, не зная, какой поток это.
В этом смысле a NetworkStream
использует шаблон дизайна адаптера. Он адаптирует API Socket
к API Stream
, так что клиенты, которые ожидают Stream
, могут его использовать.
Итак, вопрос, если NetworkStream
является адаптером Stream
для Socket
, который мы должны использовать? Ну, если вам нужен a Stream
, то NetworkStream
- ваш единственный выбор. Если вам не нужен Stream
, вы можете использовать любой API, с которым вам больше всего нравится. Если вы уже используете Socket
успешно, нет никаких оснований для перехода на NetworkStream
.