Pages

.Net Akımlar (streams)

.Net platformunda I/O işlemleri akımlar üzerine kurulmuştur.
Akım: byte düzeyinde bir girdi veya çıktı bilgisi oluşturulmasıdır.Farklı işlemler için farklı akımlar mevcuttur. Örneğin: network gibi aygıtlardan bilgi okuma, ekrana yazma,fiziksel diske yazma.
.NET Framework da 3 standart akım bulunur.

  • Console.Out : standart çıkış akımı
  • Console.In   :Standart giriş akımı
  • Console.Error : Standart Hata akımı

Dikkat:  Konsol uygulamalarında kullandığımız WriteLine(),ReadLine() gibi metodlar Consele.Out,In metodlarına aracılık ederler.

.NET Framework’te hem byte hem de karakter akımı sınıflar mevcuttur.Karakter akımı sınıfları temelde byte akımı sınıfları kullanır. Akım sınıflarının temelini soyut bir sınıf olan System.IO.Stream sınıfı oluşturur.Sınıfın temel metodları :
  image

Şimdi stream sınıfından türemiş akım sınıflarına bakalım. Akımlar program yazarken çok kullanacağımız sınıflardandır.

  • BufferedStream : Tampon Bölgeden okuma yazma işlemi yapan Akım sınıfıdır.Performansı yüksek sınıflardandır. Veriler Byte olarak okunur veya yazılır.
  • FileStream : Dosya ya yazma okuma işlemlerinde kullanılır.
    veriler byte olarak okunur yazılır.
  • MemoryStream : Direk belleği veri depolamak için kullanan akım.Byte veri okur yazar.
  • NetworkStream :  Bir soket üzerinden veri alış verişinde bulunurken kullanacağımız akımdır.

Yukarıdaki sınıflar byte akımı için kullanılan sınıflardır. Peki .net frameworkde karakter akımı için streamler varmıdır?
Karakter akmı için aşağıdaki streamler kullanılır:

  • StreamReader : Byte türündeki akımdan karakterleri okur.
  • StreamWriter : Byte türündeki akıma karakteri yazar.
  • StringReader : String türündeki bir nesneden karakterleri okur.
  • StringWriter : String türündeki bir nesneye karakteri yazar.

Bu sınıfların Temelini iseTextWriter, TextReader oluşturur.
.Net Framework un diğer akım sınıfları ise ;

  • BinaryReader,BinaryWriter : İkili(binary ) tipte verilerin okunup yazılmasını sağlayan streamlerdir.


Şimdi bir kaç örnek yapalım.

TextWriter dosya = new StreamWriter(@"C:\ibrahim.txt");//stream oluşturuyoruz.
dosya.WriteLine(DateTime.Now.ToString());// şuanki tarihi ibrahim.txt ye yazıyoruz
dosya.Close(); // stream i kapatıyoruz.
//Stream oluşturuyoruz okumak için.
TextReader dosya1 = new StreamReader(@"C:\ibrahim.txt");
  MessageBox.Show(dosya1.ReadLine());

// dosya1.ReadToEnd() metodu ile dosyayı sonuna kadar okuyabilirdik.


FileStream Dosya = new FileStream(@"C:\ibrahim.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);// doyamzı açmak yada yaratmak için hazırlıyoruz.
//Erişim izni olarak okuma ve yazma veriyoruz.
//Doyamızı okuma modunda paylaştırıyoruz. aynı anda başka streamde aokuyabilir.
           byte [] dizi = Encoding.ASCII.GetBytes("İbrahim");
           Dosya.Write(dizi,0,dizi.Length);
           Dosya.Close();

//ibrahim yazızını byta çeviriyoruz. Ve dosyaya yazıyoruz.Stream i kapatıyoruz.


FileStream i bu şekilde de kullanabiliriz

FileStream fs = new FileStream(@"c:\ibrahim.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);


//yazmak için.
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.Write(" İbrahim Özbey: ");
m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
m_streamWriter.WriteLine(" İlk Satır\n");
m_streamWriter.WriteLine(" Sıradaki satır. \n ");
m_streamWriter.Flush();

//okumak için
StreamReader m_streamReader = new StreamReader(fs); 
string str = m_streamReader.ReadLine();

Şimdi birde Memorystream Kullanımına bakalım.

MemoryStream memYaz = new MemoryStream();//stream tanımlıyoruz
          byte[] dizi = new byte[10];
          byte[] oku = new byte[dizi.Length];//byte dizilerimiz okumak ve yazmak için
          try
          {
              memYaz.Write(dizi, 0, dizi.Length);//memorystream e yazıyoruz.
          }
          catch (Exception hata)
          {
              MessageBox.Show("hata oluştu = "+hata);//yazamazsak hata alıcaz.
          }
          finally
          {
              memYaz.Read(oku,0,oku.Length);//memorystream den okuyoruz
              for (int i = 0; i < oku.Length; i++)
              {
                  ss += Convert.ToString(oku[i]);
              }
              MessageBox.Show(ss);
              memYaz.Close();//stream i kapatıyoruz.
          }

Hiç yorum yok: