我正在简化/优化我刚才写的一些代码。我已经创建了一个自定义的循环缓冲区类,以达到它的目的,但我希望用任何消费代码的更标准的东西来代替它。
要求是(以及我的CircularBuffer
助理所做的(:
- 能够窥视(读取而不永久消耗(超过一个字节的。这是必需的,因为网络消息有一个两字节长的前缀,我宁愿不缓冲一个缓冲区
- 达到最大长度后从头开始书写(圆形(
- 溢出时抛出异常的能力(覆盖未使用的数据(
最好能同时写和读,这是我在循环缓冲区中从未想过的。
我关注MemoryStream
,但从文档中我无法确定它是否满足#2和#3。
那么,是否有任何流支持/可以支持(经过修改(我的需求,或者我是否一直在创建自己的自定义循环缓冲区?
我不认为开箱即用的内存缓冲区支持#2
和#3
。也许Queue
可以作为环形缓冲器的基础。
它是一个先进先出的结构,新内容总是添加在中,并且从一开始就读取。为了使其成为具有特定大小的环形缓冲区,如果Queue.Count()
超过指定值,则可以引发异常。
这样做的好处是,您根本不需要最大大小,队列将随着可用数据的增加而增长和收缩。
通过LINQ、var nThElement = Queue.ElementAt(...);
可以进行随机访问,尽管如果进行广泛的访问,这可能会影响性能。
但对于像这样具体的东西,我个人会使用您已经拥有的自定义实现。