gpt4 book ai didi

c# - ReadOnlySequence.GetPosition 返回错误的位置

转载 作者:行者123 更新时间:2023-11-30 16:37:35 28 4
gpt4 key购买 nike

我使用的是 .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。

是否存在错误或以其他方式定义了位置?

最佳答案

事实证明,SequencePosition.GetInteger() 被认为供内部使用。使用 SequenceReader(建议 here)对我有用。

由于 SequenceReader 在标准中不可用,我填写了这个 issue .

关于c# - ReadOnlySequence.GetPosition 返回错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697223/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com