惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
T
The Blog of Author Tim Ferriss
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
I
InfoQ
Y
Y Combinator Blog
F
Full Disclosure
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
S
SegmentFault 最新的问题
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
Recent Commits to openclaw:main
Recent Commits to openclaw:main
The Register - Security
The Register - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hugging Face - Blog
Hugging Face - Blog
T
Threatpost
GbyAI
GbyAI
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
L
LangChain Blog
T
Tenable Blog
C
Cisco Blogs
T
Threat Research - Cisco Blogs
Google Online Security Blog
Google Online Security Blog

博客园 - WmW

C#学习牛顿迭代法开方 mysql将一个表中指定时间之后的新数据导入到另一个表中 使用具体时间和DateTime.Now运算时需要注意DateTime.Now的毫秒数 简单搭建一个 ASP.NET Core Web API + Mysql + SqlSugar demo项目 C# 学习研究CRC校验 C# 学习逆变和协变 C# 标准的Dispose模式 C# 返回Task或者Task<T>的方法中如果没有异步方法,就没必要使用async修饰 关于字节序的概念加深 C# 基于ReadOnlySequence和ReadOnlySequenceSegment的简单封装 简单接触BCD码,以及使用C#简单实现BCD转换 C# 非常简单的文字转语音实现 C# 输出年龄和属相列表 C# 封装了一个用来对参数值进行范围限制的泛型方法 C# 为WindowsDefender防火墙已经存在的入站规则添加IP地址 C# 将Framework4.8控制台程序注册为windows服务 C# async void 方法中使用await时外部不会等待 C# Channel学习 C# 使用字符串分割字符串 C# 一个简单的连续心率血氧压缩算法 C# 将日期时间按照ISO 8601标准转成字符串 Dapper传递参数对象时,只支持属性,无法解析字段(出现Parameter '?id' must be defined)
C# ReadOnlySequence和ReadOnlySequenceSegment简单使用
WmW · 2025-05-27 · via 博客园 - WmW

ReadOnlySequence可以将若干非连续的内存当作连续内存使用,就是用起来比较麻烦,今天先简单的研究一下,

        public static void Start() {
            //抽象类ReadOnlySequenceSegment的实现,表示一个只读序列段
            var first = new MemorySegment<byte>(new byte[] { 1, 2, 3, 4, 5 });
            var second = first.Append(new byte[] { 6, 7, 8, 9, 10 });
            var end = second.Append(new byte[] { 11, 12, 13, 14, 15 });
            //想要实现连接多个数组,只能通过ReadOnlySequenceSegment,且需要传入第一个和最后一个
            var sequence = new ReadOnlySequence<byte>(first, 0, end, end.Memory.Length);
            //var cccc = sequence.Slice(7);
            //通过SequenceReader读取数据
            SequenceReader<byte> reader = new(sequence);
            reader.TryRead(out byte value); //读一个字节
            reader.TryReadExact(3, out ReadOnlySequence<byte> ros); //读3个字节
            byte[] arr = new byte[3];
            reader.TryCopyTo(arr); //将未读的数据拷贝到arr中,已读下标不会移动
            reader.TryRead(out byte value1); //TryCopyTo不会导致已读,value1为5
            reader.Advance(3); //前进3个字节,加上读取value1,下标移动共4个
            reader.TryRead(out byte value2); //value为9
        }
        /// <summary>
        /// ReadOnlySequenceSegment为抽象类,需要自己是新啊
        /// </summary>
        public class MemorySegment<T> : ReadOnlySequenceSegment<T> {
            public MemorySegment(ReadOnlyMemory<T> memory) {
                Memory = memory;
                //RunningIndex = 1024;  //测试RunningIndex是否会影响SequenceReader读取,结果是没影响
            }
            public MemorySegment<T> Append(ReadOnlyMemory<T> memory) {
                var segment = new MemorySegment<T>(memory) {
                    //当前节点之前的节点长度之和,目前没搞清楚它具体有什么作用,可能只要是连续的就行
                    //即使将其弄乱,也不会影响读取,但是如果不设置,就会导致reader.TryCopyTo(arr)出问题
                    //RunningIndex = 3,
                    //RunningIndex = RunningIndex + Memory.Length + 2,
                    RunningIndex = RunningIndex + Memory.Length,
                };
                Next = segment; //当前段关联的下一个段
                return segment;
            }
        }