是否可以在同一基础NetworkStream上同时使用BinaryReader和BinaryWriter

  • 使用单线程顺序地交错读取和写入?
  • 使用1个线程进行读取,并使用1个线程进行写入?

  • (我的目标是通过TcpClient连接同时发送和接收数据)

    到目前为止,我遇到了两个相关的文章:

    One引用了NetworkStream docs:



    second引用了BinaryReader docs:



    我不确定100%如何解释这些引号,也不确定上述2种情况中的哪一种是可能的。

    最佳答案

    简短的回答是"is"。 NetworkStream本质上充当双工流,读操作与写操作完全分开。 BinaryReader将仅使用读取操作,而BinaryWriter将仅使用写入操作。像LengthPositionSeek这样的概念在NetworkStream上没有意义,因此不受支持。因此:在这里使用BinaryReader/BinaryWriter应该不会有冲突。但是,与此同时,我可能会建议您不要使用它们-仅仅是因为与使用原始Stream操作相比,它们通常实际上并没有增加太多,并且与任意网络协议(protocol)都不兼容。如果您要实现只使用您的代码的自定义项:当然,您可能会没事的。

    关于在使用Stream/BinaryReader时触摸BinaryWriter的警告仍然非常适用于其他一些流-例如FileStream:您可以通过在读取器/写入器认为它负责的情况下重新定位流来微不足道地破坏数据-并且由于存在单一位置:这意味着读取将影响写入等。但是:这根本不适用于NetworkStream。在这方面:NetworkStream是异常(exception),而不是规则:就您通常对Stream的期望而言,NetworkStream非常不寻常。

    关于c# - 通过NetworkStream的BinaryReader和BinaryWriter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49251939/

    10-11 10:55