ReadOnlySequence <byte>和SequencePosition上的操作

时间:2019-10-23 08:21:00

标签: c#

我必须从ReadOnlySequence<byte>缓冲区中提取一些字节,这是从PipeReader读取的结果。
基本上,我搜索一个开始序列和一个终止序列,然后得到它们之间的含义。
SequencePosition中使用的SlicePositionOf的结果时,就很好了,问题出在我需要再多获得1个字节的情况下。

这是我的工作(简体):

ReadOnlySequence<byte> raw;
Span<byte> header;
byte terminator;

var header_pos = raw.PositionOf(header);
var terminator_pos = raw.PositionOf(terminator);

var almost_there = raw.Slice(header_pos.Value, terminator_pos.Value);
return raw.Slice(header_pos.Value, almost_there.Length + 1);

很明显,如果我可以避免两次切片,那就太好了,但这是无效的:
var len = terminator_pos - header_pos;
这也是无效的:
var end_pos = terminator_pos.Value + 1;
那我该怎么办?

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找:

var end = raw.GetPosition(1, terminator_pos.Value);
return raw.Slice(header_pos.Value, end);