Strumienie   Leave a comment

Na podstawie materiałów z Informit “Working with Stream” Jim Mischel.  Jest to świetne źródło informacji na temat strumieni danych i nie tylko (generalnie o .NET). Rozróżniamy takie strumienie (cechuje je przesyłanie pojedyńczego bajtu):

  1. System.IO.FileStream reads and writes files.
  2. System.IO.MemoryStream can be used to read and write data in memory.
  3. System.Net.Sockets.NetworkStream is used to read data from and write data to the network, including across the Internet.
  4. System.Security.Cryptography.CryptoStream links streams to cryptographic transformations

Jest jeszcze nakładka  – System.IO.BufferedStream – stanowiąca bufor dla strumieni bajtowych dzięki czemu przesyłanie jest bardziej efektywne.

Podstawowe operacje na strumieniach:  odczyt, zapis i pozycjonowanie (ustawienie się na danej pozycji w ciągu bajtów).  Jakie operacje dany strumień wspiera można odczytać z właściwości: CanRead, CanWrite, CanSeek. Istnieją jeszcze operacje dodatkowe: Close i Flush (wywoływany samodzielnie lub przy okazji Close).  Dla operacji asynchronicznych służą metody BeginRead i BeginWrite.

Oto przykład czytanie ze strumienia:

static string ReadFromStream(Stream strm, int length)
{
  // Allocate the buffer
  byte[] inputBuffer = new byte[length];
  // read the data
  strm.Read(inputBuffer, 0 , length);
  // convert to string and return
  return System.Text.Encoding.Default.GetString(inputBuffer);
}

Przy czytaniu ze strumienia można wstawić domyślne zakodowanie:

StreamReader reader = new StreamReader(„textfile.txt”,System.Text.Encoding.Default);

 

Przykład przekodowania danych ze strumienia wejściowego do wyjściowego:

StreamReader reader = new System.IO.StreamReader(„testfile.txt”, System.Text.Encoding.Default);
try
{
  theString = reader.ReadToEnd();
}
finally
{
  reader.Close();
}
StreamWriter writer = new System.IO.StreamWriter(„out.txt”, false, System.Text.Encoding.UTF8);
try
{
  writer.WriteLine(theString);
}
finally
{
  writer.Close();
}

/* – */

// convert an ASCII byte buffer to a string
int BUFFER_SIZE=1024;
byte[] inputBuffer = new byte[BUFFER_SIZE];
// fill the buffer from the input stream (GetInput method not shown)
int bytesRead = GetInput(inputBuffer);
// now convert the byte buffer to a string
string strInput = System.Text.Encoding.ASCII.GetString(inputBuffer, 0, bytesRead);

// convert a string to an ASCII byte buffer
string strOutput = „USER jmischel”;
byte[] outputBuffer = System.Text.Encoding.ASCII.GetBytes(strOutput);

Posted 20 Czerwiec 2011 by marekwmsdn in .NET, C#

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: