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