首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建议:将二进制数据写入管道的最佳方法

建议:将二进制数据写入管道的最佳方法
EN

Stack Overflow用户
提问于 2022-02-01 10:54:51
回答 1查看 118关注 0票数 0

我需要一种以最小的分配量写入数据的方法,当从ReadOnlySequence读取数据时,这是可能的。

我找到的最好的方法是来自side的SpanWriter

但也许有人知道一个更好的标准解决方案。

代码语言:javascript
复制
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()

    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-02-01 11:05:11

运行时提供的方式是BinaryPrimitives

代码语言:javascript
复制
var span = memory.Span;
span[0] = 0xFF;
BinaryPrimitives.WriteInt64LittleEndian(span.Slice(1), 12345);
BinaryPrimitives.WriteInt64BigEndian(span.Slice(9), 12345);

这确实有一个缺点,即您需要跟踪您到目前为止编写的范围内的位置,这与例如BinaryWriter不同。我不知道运行时有什么类型可以帮助解决这个问题,所以如果您关心的话,您可能不得不编写自己的代码。

类似于:

代码语言:javascript
复制
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);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70939376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档