24 Şubat 2019 Pazar

BinaryFormatter Sınıfı

Giriş
Şu satırı dahil ederiz.
using System.Runtime.Serialization.Formatters.Binary;
IFormatter arayüzünü gerçekleştirir.

BinaryFormatter Java'daki ObjectOutputStream ve ObjectInputStream ile aynı işi yapar. Serialize edilecek sınıfın [Serializable] Anotasyonu ile tanıımlı olması gerekir.

Yanlış Kullanım
Nesne yerine nesnenin alanlarını yazmaya çalışmak yanlış. Şöyle yapmak yerine tüm nesnesi yazmak gerekir.
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();

formatter.Serialize(stream, foo.type);
formatter.Serialize(stream, foo.stringData);
Constructor
Şöyle yaparız.
IFormatter formatter = new BinaryFormatter();
Deserialize metodu
 Okumak için şöyle yaparız.
MyObject myObject = formatter.Deserialize(stream) as MyObject;
Stream MemoryStream olabilir. Şöyle yaparız.
byte[] bytes = ...;

var formatter = new BinaryFormatter();
using (var ms = new MemoryStream(bytes))
{
  return formatter.Deserialize(ms);
}
Stream CryptoStream olabilir. Şöyle yaparız.
using (var cryptoStream = new CryptoStream(...,..., CryptoStreamMode.Read))
{
  MyObject myObject = (MyObject) formatter.Deserialize(cryptoStream);  
  return myObject;
}
Serialize metodu
Yazmak için şöyle yaparız.
formatter.Serialize(stream, myObject);
Örnek
Stream MemoryStream olabilir. Şöyle yaparız.
using (MemoryStream mS = new MemoryStream())
{
  formatter.Serialize(ms, myObject);
  return mS.ToArray();
}
Örnek
Stream CryptoStream olabilir. Şöyle yaparız.
using (var cryptoStream = new CryptoStream(..., ..., CryptoStreamMode.Write))
{
  formatter.Serialize(cryptoStream, myObject);
  ...
}
Örnek
Stream FileStream olabilir. Şöyle yaparız.
Stream s = new FileStream(@"c:\t.txt",FileMode.Create,FileAccess.Write, FileShare.None);
formatter.Serialize(stream, foo);
Örnek
StreamWriter içindeki stream'e yazmak için şöyle yaparız.
public void Serialize(string file)
{
  using (var writer = new StreamWriter(file))
  {
    var bf = new BinaryFormatter();
    bf.Serialize(writer.BaseStream, this);
  }
}

Hiç yorum yok:

Yorum Gönder