1 Şubat 2018 Perşembe

MemoryStream Sınıfı

Giriş
MemoryStream sınıfı şifrelemeden sıkıştırmaya kadar her yerde kullanıldığı için kendi yazısını hakediyor.

using ile kullanım
Bu sınıf her zaman using ile kullanılmalı.
using (MemoryStream ms = new MemoryStream())
{...}
Constructor
Şöyle yaparız. Hem okuma hem de yazma işlemi yapılabilir ancak bence sadece yazma işlemi yapmak daha okunaklı.
MemoryStream ms = new MemoryStream()
Constructor - byte []
Şöyle yaparız. Hem okuma hem de yazma işlemi yapılabilir ancak bence sadece okuma işlemi yapmak daha okunaklı.
byte [] buffer  = ...;
using (var stream = new MemoryStream (buffer))
{
  ...
}
Constructor - byte [] + boolean
Örnek ver. Eğer writable false ise Write işlemi exception fırlatılır. Eğer writable true ise hem okuma hem de yazma işlemi yapılabilir.

Close metodu
Şöyle yaparız.
ms.Close();
CopyTo metodu
Bir stream'den diğerine kopyalar.
using (MemoryStream dstStream = new MemoryStream())
{
  using (MemoryStream srcStream= new MemoryStream())
  {
    ... 
    srcStream.CopyTo(dstStream);
  }
}
GetBuffer metodu
Stream'in içindeki tüm bellek alanını verir. ToArray'dan farklı çalışır. Length alanı ile beraber kullanmak gerekir.
ms.GetBuffer()
Length Alanı
Stream'in bellek alanının ne kadarının geçerli olduğunu belirtir.
ms.Length
Position Alanı
Seek metodu ile aynı işi yapar.
Örnek
Şöyle yaparız.
ms.Position = 0; // reset position
Örnek
Yazma işleminde sonra okumaya hazır hale getirmek için şöyle yaparız. Java'daki ByteBuffer sınıfının flip() metoduna benzer.
using (MemoryStream memStream = new MemoryStream())
{
  // Position starts at 0
  ... write data
  // Position is now N

  memStream.Position = 0; // <-- Reset the position to 0.

  using (FileStream file = new FileStream(@"d:\test.txt",
    FileMode.Create, System.IO.FileAccess.Write))
  {
    // Will copy all data in the stream from current position till the end of the stream.
    memStream.CopyTo(file);
  }
}
Seek metodu
Yazma ve okumak imlecini istenilen konuma getirir.
ms.Seek(0, SeekOrigin.Begin);
ToArray metodu
Şöyle yaparız.
byte[] bytes = ms.ToArray();
Write metodu
Şöyle yaparız.
byte[] buf = ...;
ms.Write(buf, 0, buf.Length);




Hiç yorum yok:

Yorum Gönder