使用MemoryStream(或其他)作为TCP通信的循环缓冲区



我正在简化/优化我刚才写的一些代码。我已经创建了一个自定义的循环缓冲区类,以达到它的目的,但我希望用任何消费代码的更标准的东西来代替它。

要求是(以及我的CircularBuffer助理所做的(:

  1. 能够窥视(读取而不永久消耗(超过一个字节的。这是必需的,因为网络消息有一个两字节长的前缀,我宁愿不缓冲一个缓冲区
  2. 达到最大长度后从头开始书写(圆形(
  3. 溢出时抛出异常的能力(覆盖未使用的数据(

最好能同时写和读,这是我在循环缓冲区中从未想过的。

我关注MemoryStream,但从文档中我无法确定它是否满足#2和#3。

那么,是否有任何流支持/可以支持(经过修改(我的需求,或者我是否一直在创建自己的自定义循环缓冲区?

我不认为开箱即用的内存缓冲区支持#2#3。也许Queue可以作为环形缓冲器的基础。

它是一个先进先出的结构,新内容总是添加在中,并且从一开始就读取。为了使其成为具有特定大小的环形缓冲区,如果Queue.Count()超过指定值,则可以引发异常。

这样做的好处是,您根本不需要最大大小,队列将随着可用数据的增加而增长和收缩。

通过LINQ、var nThElement = Queue.ElementAt(...);可以进行随机访问,尽管如果进行广泛的访问,这可能会影响性能。

但对于像这样具体的东西,我个人会使用您已经拥有的自定义实现。

最新更新