Uzmanına Sor

Archive for the ‘binary formatter’ tag

Dec 29 2009 Binary Formatter : Serialization / Deserialization

without comments

Merhaba arkadaslar, bugun Binary Serialization ve Deserialization uzerine ornek yapacagiz. Peki Serialization nedir? ve neden kullanilir?

Serialization işlemi, son durumlarını korumak istediğimiz nesnelerin, hiçbir veri kaybına uğramadan, geçici olarak hafızada veya kalıcı olarak bir dosyada saklanmasıdır. Bu dosya tipi XML veya binary olabilir. Bunlar her ortamdan kolayca erişilebilen basit dosya tipleridir. Bu yontem ile cok buyuk miktardaki verilere ulasabiliriz, transfer edebiliriz. Ve baska kullanicilarinda kullanimina acabiliriz.

Uygulamayi yapmak icin oncelikle WindowsApplication Projesi olusturuyoruz. Bu ornekte herhangi UI kullanmayacagiz, ve herseyi FormLoad’da yapacagiz. Oncelikle ornegimizden bahsedelim. Bir adet Insan class’i olusturacagiz, ve insan class’ini kullanaraktan bir kisi olusturup, bilgilerini local diskimizde saklayacagiz (Tabi bu sizin isteginize bagli, isterseniz database’de saklayip baska kullanicilarin kullaniminada acabilirsiniz)

 

[Serializable()]
    public class Insan
    {
        private int TcKimlikNo_;
        public int TcKimlikNo
        {
            get { return TcKimlikNo_; }
            set { TcKimlikNo_ = value; }
        }

        private string AdSoyad_;
        public string AdSoyad
        {
            get { return AdSoyad_; }
            set { AdSoyad_ = value; }
        }

        [NonSerialized(),System.Xml.Serialization.XmlIgnore()]
        private int SosyalGuvenlikNo_;

        public int SosyalGuvenlikNo
        {
            get { return SosyalGuvenlikNo_; }
            set { SosyalGuvenlikNo_ = value; }
        }

        public override string ToString()
        {
            return this.TcKimlikNo_ + " - " + this.AdSoyad_;
        }

        [System.Runtime.Serialization.OnDeserialized()]
        protected void DeserializeLog(System.Runtime.Serialization.StreamingContext sc)
        {
            // Loglama Kodlari.
            MessageBox.Show("Deserialize Edildi !");
        }

        [System.Runtime.Serialization.OnSerialized()]
        protected void SerializeLog(System.Runtime.Serialization.StreamingContext sc)
        {
            // Loglama Kodlari.
            MessageBox.Show("Serialize Edildi !");
        }

    }

 

Bu noktada en onemli olan sey, classinizi tanimlarken bu classin Serialize edilebilmesi icin uste ekledigimiz [Serializable()] textidir.

Simdi gecelim FormLoad kodlarimizia.

private void Form1_Load(object sender, EventArgs e)
        {
            // Serialization
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf =
                new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

            Insan ins = new Insan();
            ins.AdSoyad = "Serkan Hekimoglu";
            ins.TcKimlikNo = 123456789;

            System.IO.FileStream fs = new System.IO.FileStream("C:\\InsanObjesi.ins",
                System.IO.FileMode.OpenOrCreate);

            bf.Serialize(fs, ins);

            fs.Close();
        }

Formu Run ettigimizde insan classini kullanaraktan bir insan olusturuyoruz, bu insana manuel olarak isim ve tckimlik no degerleri atiyoruz, ve File Streaming kullanaraktan localimie .ins uzantili bir dosya Serialize edilmis bir dosya olusturuyoruz. Loglama kodlarini kullanarak, ekrandan son durumu ogreniyoruz.

image_thumb

Local klasorumuzu kontrol ettigimizde InsanObjesi.ins isimli Serialize edilmis obje iceren bir dosya goruyoruz.

Simdi sirada bu dosyanin icerigini okuyarak kullaniciya gosterme kismi var (Deserialize).

Bu sefer formLoad daki kodlarimizi su sekilde degistiyoruz.

private void Form1_Load(object sender, EventArgs e)
        {
            // DeSerialization
            System.IO.FileStream fs = new System.IO.FileStream(
                "I:\\InsanObjesi.ins", System.IO.FileMode.OpenOrCreate);

            Insan ins = null;
            if (fs.Length > 0)
            {
                ins = bf.Deserialize(fs) as Insan;
                MessageBox.Show(ins.ToString());
            }

            fs.Close();
        }

 

Burda onemli olan sey, dosyamizin bulundugu path’i dogru bir sekilde programa gostermektir. Bu kodlardan sonra programi run ettigimiz zaman, program path’i verilen yere gider Insanobjesi.ins isimli dosyayi File Streaming kullanarak acar ve icindeki Serialize edilmis veriyi Deserialize eder.

image_thumb[1]

image_thumb[2]

Hepsi bu kadar. Binary formatter sayesinde, cok yuksek boyutlara ulasan verilerinizi hizli bir sekilde okuyabilir, paylasabilirsiniz. Database’e insert edip. diger kullanicilarin erisimine acabilirsiniz.

Written by Serkan Hekimoğlu

December 29th, 2009 at 10:53 am