我需要一种以最小的分配量写入数据的方法,当从ReadOnlySequence读取数据时,这是可能的。
我找到的最好的方法是来自side的SpanWriter。
但也许有人知道一个更好的标准解决方案。
using System.IO.Pipelines
namespace WriteSample
{
public async Task Write()
{
var pipe = new Pipe();
var memory = pipe.Writer.GetMemory(2048);
var writer = new Writer???(memory.Span);
writer.Write((byte)0xFF);
writer.Write((long)12345);
writer.WriteBigEndian((long)12345);
await pipe.Writer.FlushAsync()
}
}发布于 2022-02-01 11:05:11
运行时提供的方式是BinaryPrimitives。
var span = memory.Span;
span[0] = 0xFF;
BinaryPrimitives.WriteInt64LittleEndian(span.Slice(1), 12345);
BinaryPrimitives.WriteInt64BigEndian(span.Slice(9), 12345);这确实有一个缺点,即您需要跟踪您到目前为止编写的范围内的位置,这与例如BinaryWriter不同。我不知道运行时有什么类型可以帮助解决这个问题,所以如果您关心的话,您可能不得不编写自己的代码。
类似于:
public ref struct SpanWriter
{
private Span<byte> span;
public SpanWriter(Span<byte> span) => this.span = span;
public void WriteInt64BigEndian(long value)
{
BinaryPrimitives.WriteInt64BigEndian(span, value);
span = span.Slice(8);
}
}https://stackoverflow.com/questions/70939376
复制相似问题