zl程序教程

您现在的位置是:首页 >  后端

当前栏目

(15) C# 抽取SuperSocket库里的缓冲区类

c# 15 抽取 缓冲区 SuperSocket
2023-09-14 09:10:04 时间

经常写网络程序的开发人员,就会发现C#里写缓冲区是比较麻烦的,因为它的数组不能动态地增加,每次都需要创建一个新的缓冲区。因此C#比python、C、C++等语言在这方便是有缺陷的,或者说是不足够友好的。所以在这里处理缓冲区的方式,就变得有点复杂了。如果在C++里直接new就可以了,在python里可以直接用+就解决了。

为了解决上述的问题,因此深入地钻研了一下supersocket类库,然后看到它是怎么样高效地处理接收缓冲区的,这样处理的方式是有点复杂,但是还是比自己写的要好很多。所以在一些工程里,不需要导入整个类库的功能,就需要把其中几个类抽取出来直接使用。

本文就来描述这个过程,先要把文件IBufferState.cs拷贝出来,这个文件描述了接口类IBufferState。

接着拷贝BufferList.cs文件,这个文件描述了BufferList类,这个类用来添加ArraySegment<byte>类型的,每个ArraySegment<byte>类型就是一段数据,相当于一个小缓冲区。接收的数据是一份一份的,这样就需要一个链表把它们串起来。

最后拷贝文件BufferStream.cs,它是实现了把上面的链表转换为连在一起的缓冲区,并且实现对缓冲区的操作,比如读取一个字节,读取两个字节,读取一个整数等等。这样就很方便我们对缓冲区的操作了。

整个例子的代码如下:

        static public void Test()
        {
            BufferList bufList = new BufferList();
            BufferStateE