我正在尝试使用Jon Skeet编写的EndianBinaryReaderEndianBinaryWriter作为其misc utils lib的一部分。它非常适合我做过的两种用途。

从网络流(TCPClient)进行的第一次读取,其中我坐在一个循环中读取传入的数据。我可以创建一个EndianBinaryReader,然后在应用程序关闭时将其丢弃。我通过传入EndianBinaryReader来构造TCPClient.GetStream

我现在正在尝试从UdpClient读取内容时执行相同的操作,但是它没有流,因为它的连接较少。所以我得到这样的数据

byte[] data = udpClientSnapShot.Receive(ref endpoint);


我可以将这些数据放入内存流中

var memoryStream = new MemoryStream(data);


然后创建EndianBinaryReader

var endianbinaryReader = new EndianBinaryReader(
    new BigEndianBitConverter(), memoryStream,Encoding.ASCII);


但这意味着我每次阅读都必须创建一个新的endian阅读器。是否有一种方法可以创建单个流,而可以仅使用udp客户端中的数据不断更新输入流?

最佳答案

我不记得EndianBinaryReader是否缓冲-您可以覆盖单个MemoryStream吗?但老实说,这里的额外对象几乎没有开销。包有多大? (将其放入MemoryStream将克隆byte[])。

我很想使用最简单的方法,看看是否存在真正的问题。我可能要做的一个更改就是引入using(因为它们是IDisposable):

using(var memoryStream = new MemoryStream(data))
using(var endianbinaryReader = ..blah..) {
    // use it
}

关于c# - Endian BinaryReader-输入流的持续更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2118619/

10-12 06:28