Me gustaría convertir una cadena en un objeto ReadOnlyMemory. Es fácil convertir una cadena en un objeto ReadOnlyMemory (usando .AsMemory() ), pero no hay una forma directa de convertir eso en un byte de tipo, o convertir directamente la cadena de otra manera.
La forma más sencilla que encontré es convirtiendo la cadena en un byte[] y devolviéndola como ReadOnlyMemory, así:
var memory = new ReadOnlyMemory<byte>(Encoding.UTF8.GetBytes(str));Tú eres un camino. La clase EncodingExtensions contiene métodos de extensión GetBytes que pueden escribir en un IBuffeWriter< T> . Dos clases integradas implementan esta interfaz, ArrayBufferWriter<> y PipeWriter .
En las API que usan System.IO.Pipelines, es mejor escribir en un PipeWriter directamente en lugar de crear un objeto intermedio. ArrayBufferWriter en su lugar, porque... es más fácil. Todavía permite reutilizar la memoria en lugar de asignar nuevos búferes:
var text="....."; var writer=new ArrayBufferWrite(8192); Encoding.UTF8.GetBytes(text,writer); var memory=writer.WrittenMemory; WriteMemoy devuelve un objeto ReadOnlyMemory<T> con los datos escritos.
El búfer se puede borrar con Reset() y reutilizar:
var writer=new ArrayBufferWrite(8192); while(true) { writer.Reset(); var text=SomehowGetString(); Encoding.UTF8.GetBytes(text,writer); var memory=writer.WrittenMemory; ... }