c# - 将字符串转换为 ReadOnlyMemory在 C# 中?
问题描述
我想将 String 转换为 ReadOnlyMemory 对象。将字符串转换为 ReadOnlyMemory 对象(使用.AsMemory())很容易,但没有直接的方法将其转换为字节类型,或者直接转换字符串。
解决方案
你是一种方式。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;
...
}
推荐阅读
- javascript - 从下拉列表中获取动态调用 api 的数据
- azure - Purview 是否显示 ADF 管道通过数据流自动创建的表的沿袭?
- ruby-on-rails - Rails 管理员:下拉条目太多
- javascript - 使用 Fetch API 时数据流如何工作?
- r - 如何合并每月汇总并在某个日期拆分数据集
- c - 为什么 GCC 不会在长参数上给我 stackerror?
- java - 我如何将纹理添加到 libgdx 中的 textButtons
- php - ErrorException 未定义变量:posts - $posts 未定义
- laravel - 如何在 laravel Blade 中为管理布局构建视图?
- c - C中的位域;字节和位