「.Netでのクラスストリームとその派生物」のトピックのコントロールに拍車をかける

すでにペダリングが得意だったときでも、継承階層と.NetのStream、StreamWriter、HttpWriterなどのクラスの使用方法を思い出せませんでした。 私はこれを簡単な方法で決めました-私はそれらをすべて(基本)書き、それぞれについていくつかの言葉を書きました。
トピックに精通している人にとっては、新しいものはここにありません。


ここに主なクラスがあります:

ストリーム

-要約
バイトシーケンスの汎用表現を提供します。

メモリストリーム


バックアップストレージがメモリであるスレッドを作成します。
そして読み取りと書き込み。
バイト[]を処理するこのような手段。

コードの一部:

バイト[]バッファ=新しいバイト[] {11,12,13,14,15,16,17,18,19,20};
バイト[] buffer2 =新しいバイト[] {21,22,23};

MemoryStream memStream =新しいMemoryStream(バッファ);
memStream.WriteByte(66);
memStream.WriteByte(77);

int adsfs = memStream.ReadByte();
int adsfs2 = memStream.ReadByte();

memStream.Position = 5;
memStream.Write(buffer2、0、2);

memStream.Seek(2、SeekOrigin.Current);

興味深いことに、読み取りと書き込みの両方が、書き込み/読み取りバイト数だけストリーム内の位置を等しく移動します。

ファイルストリーム


すべて同じ、ファイルからの書き込み/読み取り
コードの一部:

FileStream fileStream = new FileStream( "file33.txt"、FileMode.Open);
バイト[] buffer2 =新しいバイト[] {71、72、73};

var b1 = fileStream.ReadByte();
var b2 = fileStream.ReadByte();
var b3 = fileStream.ReadByte();

fileStream.WriteByte((byte)b3);
fileStream.WriteByte((byte)b3);

//およびすべてのプロパティ
var b = fileStream.CanRead;
b = fileStream.CanWrite;
b = fileStream.CanSeek;

fileStream.Position = 106;
fileStream.Write(buffer2、0、3);

fileStream.Seek(1、SeekOrigin.End);
fileStream.WriteByte(76);
fileStream.WriteByte(76);
fileStream.WriteByte(76);
fileStream.WriteByte(76);

ReadByte()は、読み取りが失敗したとき(-1)を理解するためにintを返します。

テキストリーダー

-要約
Streamではなく、バイトではなく文字(読み取り専用)を読み取ることができるアドオン。
連続した文字セットを読み取るリーダーを表します。

ストリームリーダー


コードの一部:

バイト[]バッファ=新しいバイト[] {71,72,73,74,75,76,77,78,79,80、80,80,80};

バイト[] buffer2 =新しいバイト[] {81,82,83};

MemoryStream memStream =新しいMemoryStream(バッファ);
使用(StreamReader strReader = new StreamReader(memStream))
{
var sd = strReader.Peek();
var sdd = strReader.Peek();
var sded = strReader.Peek();

var dasd = strReader.Read();
文字列s =((char)dasd).ToString();

var das2d = strReader.Read();
var das3d = strReader.Read();

strReader.BaseStream.Position = 8;

var vsd = strReader.ReadToEnd();
}

データがバッファリングされるため、Positionがジャンプすることを除き、すべてが簡単になりました。

StringReader


コードの一部:

string s = "SDAFASDF AF dfsdfsd fas";
StringReader stringReader = new StringReader(s);
var sdf = stringReader.Read();
var sddf = stringReader.Read();
var sddasdf = stringReader.Read();
var sdsssf = stringReader.Read();
var sdfaa = stringReader.Read();
var sdfg = stringReader.ReadLine();

テキストライター

-要約
連続した文字セットを記録するレコーダーを表します。

ストリームライター


ストリームに書き込むためのストリームアドイン。 抽象TextWriterから派生

コードの一部:

FileStream fileStream = new FileStream( "file33.txt"、FileMode.Open);
fileStream.Seek(1、SeekOrigin.End);

StreamWriter strWriter = new StreamWriter(fileStream);

strWriter.Write( "sad");
strWriter.WriteLine( "sad");
strWriter.Write( "sad");
strWriter.Close();

ストリームの位置は記録時に変更されません。
コードの一部:

バイト[]バッファ=新しいバイト[] {71、72、73、74、75、76、77、78、79、80、80、80、80}。

MemoryStream memStream =新しいMemoryStream(バッファ);

StreamWriter strWriter = new StreamWriter(memStream);

strWriter.Write( "sad");
// strWriter.Write( "sasfagfsdghs h dfhdh d hd ddf d");

strWriter.Close();

Xmlreader


別のアドオン。 これで、TextReaderの上に。 文字列、ストリーム、およびテキストリーダーとして初期化できます。
コードの一部:

FileStream fileStream = new FileStream( "file1.txt"、FileMode.Open);

XmlReader reader = XmlReader.Create(fileStream);

StringBuilder output = new StringBuilder();
XmlWriter writer = XmlWriter.Create(出力);

//ファイルを解析し、各ノードを表示します。
while(reader.Read())
{
スイッチ(reader.NodeType)
{
case XmlNodeType.Element:
writer.WriteStartElement(reader.Name);
休憩;
case XmlNodeType.Text:
writer.WriteString(reader.Value);
休憩;
case XmlNodeType.XmlDeclaration:
case XmlNodeType.ProcessingInstruction:
writer.WriteProcessingInstruction(reader.Name、reader.Value);
休憩;
case XmlNodeType.Comment:
writer.WriteComment(reader.Value);
休憩;
case XmlNodeType.EndElement:
writer.WriteFullEndElement();
休憩;
}

}

writer.Close();

かなり奇妙な(しかし最速のように見える)xmlを読み取ります。 つまり、XdocumentまたはXMLDocumentの方がはるかに便利ですが、実際には、これらのクラスはこの構造の追加アドオンです。

Xmlwriter


XMLデータへの高速でキャッシュされないフォワード専用アクセスを提供するリーダーを表します。
このタイプのメソッドを備えたTextWriter(StreamWriter)のアドオン:
コードの一部:

使用(XmlWriter writer = XmlWriter.Create(xmlFile、settings))
{
writer.WriteStartDocument(false);
writer.WriteComment( "これはコメントです。");
writer.WriteStartElement( "books");
writer.WriteStartElement( "book");
writer.WriteElementString( "id"、 "1");
writer.WriteElementString( "name"、 "Apple Training Series:GarageBand 09");
writer.WriteElementString( "author"、 "Mary Plummer");
writer.WriteElementString( "price"、 "$ 39.99");
writer.WriteEndElement();
writer.WriteEndElement();
writer.Flush();
}
}

Source: https://habr.com/ru/post/J132165/


All Articles