Crear StringStream en C#
-
Utilice el tándem de las clases
MemoryStream
yStreamReader
para crearStringStream
enC#
-
Crear una clase
StringStream
enC#
En C#, StringStream
se deriva de Stream
con la ayuda de StringBuilder
. Su propósito principal es aceptar y pasar los datos actualmente almacenados solo como una cadena a un método.
En este tutorial, aprenderá varios enfoques para crear StringStream
en C#. La forma más sencilla de derivar un StringStream
de MemoryStream
es aprovechar su constructor que acepta la matriz de bytes de datos contenidos en el Stream
.
Utilice el tándem de las clases MemoryStream
y StreamReader
para crear StringStream
en C#
Use StreamReader
para leer caracteres para transmitir en una codificación específica, y se hereda de TextReader
que proporciona métodos para leer caracteres del flujo de entrada. System.IO.Stream
como clase abstracta proporciona métodos para transferir bytes a la fuente.
El MemoryStream
hereda la clase Stream
y proporciona la funcionalidad para leer y escribir datos (en bytes) de una fuente en particular. Desempeña un papel crucial en la creación de StringStream
en C#.
// add `System.IO` library to your C# project
using System;
using System.IO;
using System.Text;
namespace createStringStream {
class StreamClass {
static void Main(string[] args) {
// creation of StringStream object for communication or data transfer
string StringStream;
using (var objStream = new MemoryStream()) {
Console.WriteLine(objStream);
// initial postition of the `MemoryStream` object
objStream.Position = 0;
using (var reader = new StreamReader(objStream)) {
// StringStream creation and initialization
StringStream = reader.ReadToEnd();
}
}
}
}
}
En StringStream
, pasar datos de la fuente al constructor MemoryStream
requiere que los datos sean un objeto MemoryStream
. Utilice el método GetBytes Encoding
para crear una matriz de bytes.
Cree un objeto StreamReader
para convertir un objeto Stream
en una cadena C# y llame al método ReadToEnd
.
// add `System.IO` before executing the C# code
using System;
using System.IO;
using System.Text;
namespace convertVar {
class StringtoStream {
static void Main(string[] args) {
// declare a string variable
string test = "Experiment values: 3.1437";
// for converting string to stream
byte[] byteArray = Encoding.ASCII.GetBytes(test);
MemoryStream stream = new MemoryStream(byteArray);
// for converting stream to string
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();
// output
Console.WriteLine(text);
Console.ReadLine();
}
}
}
Crear una clase StringStream
en C#
A diferencia de Java, C# no tiene una clase StringStream
preconstruida. Es fácil hacer un objeto de clase StringStream
para cumplir el propósito utilizando MemoryStream
y StreamBuilder
.
Sin embargo, puede crear una clase StringStram
con la ayuda del siguiente código C#.
// add `System.IO` referance to your C# project to create `StringStream` class
using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace userStringStream {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
// a click even for `Create StringStream` button
private void button2_Click(object sender, EventArgs e) {
string s0 =
"It's an example data the `s0` string contains. Ur fndf, isnd sdnin.\r\n" +
"Ientif nt ieuth nnsh riwnw htune iw o nwinundhsi a xmunc, dusn ainde efn. Dncisdns asnw eunc usn sdu s n xcuxc sd c.\r\n";
// create `StringStream` class objects to access its functionality and methods
StringStream ss0 = new StringStream(s0);
StringStream ss1 = new StringStream();
int line = 1;
Console.WriteLine("Contents of input stream: \n");
using (StreamReader reader = new StreamReader(ss0)) {
using (StreamWriter writer = new StreamWriter(ss1)) {
while (!reader.EndOfStream) {
string s = reader.ReadLine();
Console.WriteLine("Line " + line++ + ": " + s);
writer.WriteLine(s);
Console.WriteLine();
}
}
}
Console.WriteLine("Contents of output stream: \n");
Console.Write(ss1.ToString());
}
}
// the creation of `StringStream` class
public class StringStream : Stream {
// create `memoryStream` object for data assigning through `MemoryStream`
private readonly MemoryStream memoryStream;
// In genral, `memoryStream` is named as `_memory` similar to Java
public StringStream(string text) {
memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(text));
}
public StringStream() {
memoryStream = new MemoryStream();
}
public StringStream(int capacity) {
memoryStream = new MemoryStream(capacity);
}
public override void Flush() {
memoryStream.Flush();
}
public override int Read(byte[] buffer, int offset, int count) {
return memoryStream.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin) {
return memoryStream.Seek(offset, origin);
}
public override void SetLength(long value) {
memoryStream.SetLength(value);
}
public override void Write(byte[] buffer, int offset, int count) {
memoryStream.Write(buffer, offset, count);
}
public override bool CanRead => memoryStream.CanRead;
public override bool CanSeek => memoryStream.CanSeek;
public override bool CanWrite => memoryStream.CanWrite;
public override long Length => memoryStream.Length;
public override long Position {
get => memoryStream.Position;
set => memoryStream.Position = value;
}
public override string ToString() {
return System.Text.Encoding.UTF8.GetString(memoryStream.GetBuffer(), 0,
(int)memoryStream.Length);
}
public override int ReadByte() {
return memoryStream.ReadByte();
}
public override void WriteByte(byte value) {
memoryStream.WriteByte(value);
}
}
}
Stream
proporciona una interfaz genérica para los tipos de entrada y salida en C#. Con la ayuda de las clases MemoryStream
y StreamReader
, los desarrolladores pueden aislarse de los detalles específicos de los dispositivos y sistemas operativos subyacentes.
Por lo tanto, StringStream
es vital para la comunicación entre dispositivos al recibir, procesar y transmitir datos sin complicar el Stream
.
Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.
GitHub