当前位置 : 主页 > 编程语言 > c语言 >

c# – 通过NetworkStream的BinaryReader和BinaryWriter

来源:互联网 收集:自由互联 发布时间:2021-06-25
是否可以使用相同的底层NetworkStream同时使用BinaryReader和BinaryWriter 使用单个线程顺序隔行扫描读写? 使用1个线程进行读取,使用1个线程进行写入? (我的目标是通过TcpClient连接同时发送
是否可以使用相同的底层NetworkStream同时使用BinaryReader和BinaryWriter

>使用单个线程顺序隔行扫描读写?
>使用1个线程进行读取,使用1个线程进行写入?

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

到目前为止,我遇到了两个相关的帖子:

One引用NetworkStream docs:

Read and write operations can be performed simultaneously on an instance of the NetworkStream class without the need for synchronization. As long as there is one unique thread for the write operations and one unique thread for the read operations, there will be no cross-interference between read and write threads and no synchronization is required.

second引用了BinaryReader docs:

Using the underlying stream while reading or while using the BinaryReader can cause data loss and corruption. For example, the same bytes might be read more than once, bytes might be skipped, or character reading might become unpredictable.

我不是100%肯定如何解释这些引用,我不确定我的2个案例中哪一个是可能的.

“是”是简短的答案; NetworkStream本质上充当双工流,读取操作与写入操作完全分开. BinaryReader只会使用read操作,而BinaryWriter只会使用write操作.像Length,Position和Seek这样的概念在NetworkStream上没有意义,也不受支持.所以:这里使用BinaryReader / BinaryWriter应该没有冲突.但是,与此同时,我可能会建议不要使用它们 – 只是因为它们通常实际上并没有使用原始Stream操作增加太多,并且与任意网络协议不兼容.如果你正在实现一些只使用你的代码的自定义:你当然可能没事.

使用BinaryReader / BinaryWriter时触发Stream的警告仍然非常适用于其他一些流 – 例如FileStream:当读者/编写者认为它负责时,你可以通过重新定位流来轻易地破坏数据 – 并且因为有一个单一位置:这意味着读取会影响写入等.但是:这根本不适用于NetworkStream.在这方面:NetworkStream是例外,而不是规则:就你通常对Stream的期望而言,NetworkStream非常不寻常.

网友评论