If you are forced to use low-level parameters, such as sockets and channels, and want an abstraction to pull streaming data from these data sources, Stream is ideal because it provides this abstraction for this model.
If you are encoding Stream instances, then you can implement Stream something, rather than worry about the underlying transport.
Regarding the use of NetworkStream and Socket, NetworkStream simply wraps an instance of Socket and applies calls to the pull (Stream) model to Socket.
source share