我必须从ReadOnlySequence<byte>
缓冲区中提取一些字节,这是从PipeReader
读取的结果。
基本上,我搜索一个开始序列和一个终止序列,然后得到它们之间的含义。
当SequencePosition
中使用的Slice
是PositionOf
的结果时,就很好了,问题出在我需要再多获得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;
那我该怎么办?
答案 0 :(得分:0)
我认为您正在寻找:
var end = raw.GetPosition(1, terminator_pos.Value);
return raw.Slice(header_pos.Value, end);