我正在尝试使用Jon Skeet编写的EndianBinaryReader
和EndianBinaryWriter
作为其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/