首页 > 解决方案 > 将字符串转换为 ReadOnlyMemory在 C# 中?

问题描述

我想将 String 转换为 ReadOnlyMemory 对象。将字符串转换为 ReadOnlyMemory 对象(使用.AsMemory())很容易,但没有直接的方法将其转换为字节类型,或者直接转换字符串。

标签: c#.net

解决方案


一种方式。EncodingExtensions类包含可以写入IBufferWriter< T>GetBytes扩展方法。两个内置类实现了这个接口,ArrayBufferWriter<>PipeWriter

在使用 System.IO.Pipelines 的 API 中,最好直接写入 PipeWriter 而不是创建中间对象。我会ArrayBufferWriter改用,因为......它更容易。它仍然允许重用内存而不是分配新的缓冲区:

var text=".....";
var writer=new ArrayBufferWrite(8192);

Encoding.UTF8.GetBytes(text,writer);

var memory=writer.WrittenMemory;

WriteMemoy返回一个ReadOnlyMemory<T>包含写入数据的对象。

可以使用Reset()清除缓冲区并重新使用:

var writer=new ArrayBufferWrite(8192);
while(true)
{
    writer.Reset();
    var text=SomehowGetString();
    
    Encoding.UTF8.GetBytes(text,writer);

    var memory=writer.WrittenMemory;
    ...
}

推荐阅读