C#ストリームまとめ(Stream)

8138 ワード

この記事では、C#プログラミングでよく使われるストリームを簡単にまとめました.例えば、FileStream、MemoryStream、BufferedStream、NetWorkStream、StreamReader/streamWriter、TextReader/TextWriterなどの簡単な使い方です.
内容
1  FileStreamクラス
     FileStreamクラスは、主にディスク上のファイルを読み込むか、ディスクファイルに情報を書き込むために使用されます.プログラム内のデータの一部をディスクに格納したり、プロファイル内のコンテンツを読み出したりする必要がある場合があります.ここではクラスを使用します.
     ディスク上のファイルからコンテンツを読み込みます.
FileStream file = File.Open(@"F:\file.txt", FileMode.Open); //      
byte[] array = new byte[file.Length];//       
file.Read(array, 0, array.Length);//               
file.Close();//   
string str = Encoding.Default.GetString(array);//             
Console.WriteLine(str);

ディスクファイルにデータを書き込みます.
FileStream file = File.Open(@"F:\file.txt", FileMode.Append);//      
byte[] array = Encoding.UTF8.GetBytes("Hello World!  ");//       
file.Write(array, 0, array.Length);//          
file.Close();//   

二  MemoryStreamクラス
     MemoryStreamクラスは、主にメモリ内のデータを操作するために使用されます.例えば、ネットワーク内でデータを転送する際にストリームの形式を用いることができ、これらのストリームデータを受信すると、MemoryStreamクラスを宣言して格納し、処理することができる.
     MemoryStreamアクション文字列:
string str = "Hi!  !";
byte[] array = Encoding.UTF8.GetBytes(str);//           
MemoryStream memory = new MemoryStream(array);//   MemoryStream 
byte[] arrayNew = memory.ToArray();//              
string strNew = Encoding.UTF8.GetString(arrayNew);//           

三  BufferedStreamクラス
     BufferedStreamクラスは主にストリームデータを処理するために使用されますが、このクラスの主な機能は他のストリームクラスをカプセル化するために使用されます.なぜ他のストリームクラスをカプセル化するのか、その意味は何ですか?マイクロソフトによると、主に一部のストリームがストレージデバイスを直接操作する時間を減らす.一部のストリームでは、直接ディスクにデータを格納する効率は高くありません.BufferedStreamでパッケージされたストリームは、メモリに統一された処理を行ってからディスクにデータを書き込むと、書き込みの効率が向上します.
     ディスク上のファイルをディスク上の別のファイルに書き込みます.
BufferedStream   
FileStream file1 = File.Open(@"F:\file1.txt", FileMode.OpenOrCreate,FileAccess.Read);//     
FileStream file 2= File.Open(@"F:\file2.txt", FileMode.OpenOrCreate,FileAccess.Write);//     

byte[] array = new byte[4096];
      
BufferedStream bufferedInput = new BufferedStream(file1);//     
BufferedStream bufferedOutput = new BufferedStream(file2);//     

bufferedInput.Read(array, 0, array.Length);
bufferedOutput.Write(array, 0, array.Length);

int bytesRead = 0;
while ((bytesRead = bufferedInput.Read(array, 0, 4096)) > 0)//      
  {
    bufferedOutput.Write(array, 0, bytesRead);
    Console.WriteLine(bytesRead);
   }
bufferedInput.Close();//     
bufferedOutput.Close();
file1.Close();
file2.Close();

実際の試験では,ストリームをカプセル化する方法は効率的にあまり向上しなかった.他のストリームを使用してファイルストリームをカプセル化することもできます.頻繁にディスクを読み取ることを保証するには、コードがそうしなければよいので、コードに制御を加えることで、プログラムがディスクを頻繁に操作しないことを保証することができます.
4 NetWorkStreamクラス
    NetWorkStreamクラスは、サーバとクライアントの通信を処理するためのストリームです.ネットワークプログラミングでよく使用され、主にSocket、TcpClient、TcpListenerのようなクラスで得られるストリームを処理するために使用されます.
    簡単なTCP同期方式サーバーとクライアント通信:
   
TcpListener lis=new TcpListener(5000); //     
lis.Start();//  
Socket sock=lis.AcceptSocket();//

NetworkStream networkStream = new NetworkStream(sock);//  Socket   
if (netStream.DataAvailable)   //          
{
   byte[] data = new byte[1024];   //
   int len = netStream.Read(data, 0, data.Length);  //
   string line = Encoding.Default.GetString(data, 0, len);  //            
}
   
TcpClient client = new TcpClient();//   tcp  
client.Connect("127.0.0.1", 5000);//     
NetworkStream myStream = client.GetStream();//     
                
byte[] data = Encoding.Default.GetBytes("Hi,  ");  //                
myStream .Write(data, 0, data.Length);  // myStream      
myStream .Flush();  //       
myStream .Close();

五  StreamReader/streamWriterクラス
     StreamReader/streamWriterは主にストリームデータを処理するために使用されます.これらは、それぞれ効率的なストリーム読み取り/書き込み機能を提供します.
     読み込みと書き込み:
StreamReader/Writer  
StreamReader reader = new StreamReader("filePath");//     
StreamWriter writer = new StreamWriter("filePath");//     

string readStr=reader.ReadLine();//       
string readAff = reader.ReadToEnd();//       

writer.Write("Hi   ");//    
writer.WriteLine("Hi   ");//    

reader.Close();//   
writer.Close();

六  TextReader/TextWriterクラス
     TextReader/TextWriterクラスは主にストリームデータの処理に用いられる.これらは、それぞれ効率的なテキストストリームの読み取り/書き込み機能を提供します.
     読み込みと書き込み:
TextReader/Writer  
TextReader textReader = new StringReader("Hi   ");//      
TextWriter textWriter = new StringWriter();//      

char[] c=new char[4096];
int chars = 0;
while ((chars = textReader.Read(c, 0, 4096)) > 0)//             
{
   textWriter.Write(c, 0, 4096);//         
}

string str= textWriter.ToString();//           
textReader.Close();//   
textWriter.Close();

注意事項:
1.ストリームを使用した後、閉じる必要があります.
2.ストリーム内のデータをメモリにロードするときは、メモリオーバーフローなどの問題を考慮します.