c# - ReadOnlySequence.GetPosition 返回错误的位置
问题描述
我正在使用 .NET Standard 2.1 Preview 8。我构建了一个小程序,基本上从 TcpSocket 写入/读取。阅读完成Pipe
。
鉴于以下实现
var pipe = new Pipe();
await pipe.Writer.WriteAsync(new ReadOnlyMemory<byte>(new byte[100]));
await pipe.Writer.FlushAsync();
while (true)
{
var readResult = await pipe.Reader.ReadAsync();
if (readResult.Buffer.Length <= 0)
break;
Console.WriteLine("Buffer length:" + readResult.Buffer.Length);
Console.WriteLine("Buffer start:" + readResult.Buffer.Start.GetInteger());
var position = readResult.Buffer.GetPosition(10);
Console.WriteLine("End position:" + position.GetInteger());
Console.WriteLine();
pipe.Reader.AdvanceTo(position);
}
此方案将 100 个字节写入PipeWriter
. 然后在循环中读取缓冲区,Reader 前进 10 个字节。
这会生成以下输出:
Buffer length:100
Buffer start:0
End position:10
Buffer length:90
Buffer start:10
End position:20
Buffer length:80
Buffer start:20
End position:30
Buffer length:70
Buffer start:30
End position:40
Buffer length:60
Buffer start:40
End position:50
Buffer length:50
Buffer start:50
End position:60
Buffer length:40
Buffer start:60
End position:70
Buffer length:30
Buffer start:70
End position:80
Buffer length:20
Buffer start:80
End position:90
Buffer length:10
Buffer start:90
End position:100
我不明白为什么缓冲区开始并且位置每次迭代都会增加 10。我希望在管道上读取之后,对于每次迭代,缓冲区开始为 0,当我获得偏移量为 10 的位置时,位置将为 10。每次迭代只有缓冲区大小应减少 10。
是否存在错误或以其他方式定义的位置?
解决方案
推荐阅读
- migration - 是否有任何工具可以将 etl RPG 流程迁移到现代 ETL 工具?
- flutter - Flutter:获取所有字母的位置。(游戏)
- python - time.clock() 会受到系统状态的严重影响吗?
- node.js - 如何使用我的选择查询更正 typeorm 错误?
- async-await - 在嵌套路由中刷新时未调用 asyncData
- webpack - SCSS 编译时间过长
- jquery - Phonegap AJAX 不适用于 iOS 和 Android
- selenium - 如何让 Rspec 连接到 CircleCI 上的 Chromedriver?
- python - 为了在 ScikitLearn 中使用 .fit() 函数,重塑数据框的正确方法是什么?
- blazor - 如何在 Blazor 应用程序中使用 FastReport