C#에서 StringStream 만들기
C#에서 StringStream
은 StringBuilder
의 도움으로 Stream
에서 파생됩니다. 기본 목적은 현재 문자열로만 저장된 데이터를 수락하고 메서드에 전달하는 것입니다.
이 자습서에서는 C#에서 StringStream
을 생성하는 여러 접근 방식을 배웁니다. MemoryStream
에서 StringStream
을 파생시키는 가장 쉬운 방법은 Stream
에 포함된 데이터의 바이트 배열을 허용하는 생성자를 활용하는 것입니다.
MemoryStream
및 StreamReader
클래스의 탠덤을 사용하여 C#
에서 StringStream
생성
StreamReader
를 사용하여 지정된 인코딩으로 스트리밍할 문자를 읽고 입력 스트림에서 문자를 읽는 메서드를 제공하는 TextReader
에서 상속됩니다. System.IO.Stream
은 추상 클래스로 바이트를 소스로 전송하는 메서드를 제공합니다.
MemoryStream
은 Stream
클래스를 상속하고 특정 소스에서 데이터(바이트)를 읽고 쓰는 기능을 제공합니다. C#에서 StringStream
생성에 중요한 역할을 합니다.
// 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();
}
}
}
}
}
StringStream
에서 소스에서 MemoryStream
생성자로 데이터를 전달하려면 데이터가 MemoryStream
개체여야 합니다. GetBytes Encoding
방법을 사용하여 바이트 배열을 만듭니다.
StreamReader
개체를 생성하여 Stream
개체를 C# 문자열로 변환하고 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();
}
}
}
C#
에서 StringStream
클래스 생성
Java와 달리 C#에는 사전 빌드 StringStream
클래스가 없습니다. MemoryStream
및 StreamBuilder
를 사용하여 목적을 달성하기 위해 StringStream
클래스 객체를 만드는 것은 쉽습니다.
그러나 다음 C# 코드를 사용하여 StringStram
클래스를 만들 수 있습니다.
// 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’은 C#의 입력 및 출력 유형에 대한 일반 인터페이스를 제공합니다. MemoryStream
및 StreamReader
클래스의 도움으로 개발자는 기본 장치 및 OS의 특정 세부 정보로부터 자신을 격리할 수 있습니다.
따라서 StringStream
은 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