Makale Özeti

Önceki makalede genel anlamıyla serialization kavramını incelenmiş ve "XML Serialization" yöntemi kullanılarak, bir nesnenin durum bilgisinin, XML formatında nasıl ifade edilebileceği örneklenmişti. Bu makalede ise, Binary serialization yöntemi ele alınmaktadır.

Makale

BinarySerialization

Binary Serialization

        Önceki makalede genel anlamıyla serialization kavramını incelenmiş ve "XML Serialization" yöntemi kullanılarak, bir nesnenin durum bilgisinin, XML formatında nasıl ifade edilebileceği örneklenmişti. Bu makalede ise, Binary serialization yöntemi ele alınmaktadır.

       Binary serialization yöntemi, bellekteki veriye ilişkin bit lerin serialize edilmesine dayandığı için, diğer yöntemlere izafeten daha hızlı gerçekleştirilebilmektedir.

       .NET Framework Class Library içerisine, binary serialization yöntemini gerçekleştirmek üzere, BinaryFormatter isimli bir sınıf eklenmiştir. Bu sınıfın anahtar üyeleri; aşağıda prototipleri verilmiş olan, Serialize() ve Deserialize() metotlarıdır.

Overloads Public Overridable Sub Serialize( _
         
ByVal serializationStream as Stream, _
          ByVal graph as Object)    

Overloads Public Overridable Function Deserialize( _
          ByVal serializationStream as Stream) as Object

Örnek 1 : Aşağıdaki konsol uygulamasında, bir "Hashtable" yapısı içinde bulunan elemanların ".dat" uzantılı ve binary formdaki bir dosyaya serialize edilmesi örneklenmektedir.

Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary

Module Module1

    Public Sub PerformSerialization(ByVal prm As Hashtable)
        Dim oFormatter As New BinaryFormatter
        Dim oFile As FileStream
        oFile = New FileStream("C:\SubMarines.dat", FileMode.Create)
        oFormatter.Serialize(oFile, prm) 
        oFile.Close()
    End Sub

    Sub Main()
        Dim subMarines As New Hashtable 
        subMarines.Add("BurakReis", "1970")
        subMarines.Add("Dumlupınar", "1972")
        subMarines.Add("Batıray", "1978")
        PerformSerialization(subMarines) 
    End Sub

End Module

Şekil 1 : Yaratılan dosyanın hex editördeki görünümü

Örnek 2 : Aşağıdaki uygulamada ise, örnek 1 de yaratılmış olan dosyadan alınan verilerin, bellekteki bir "Hashtable" yapısı içerisine, deserialize edilmesi örneklenmektedir.

Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary

Module Module1 
     Sub Main()
       
Dim oFormatter As New BinaryFormatter
        Dim oFile As FileStream
        oFile = New FileStream("C:\SubMarines.dat", FileMode.Open)
        Dim hTbl As Hashtable
        hTbl = CType(oFormatter.Deserialize(oFile), Hashtable) 

        Dim oDictionary As DictionaryEntry 
        For Each oDictionary In hTbl
            
Console.WriteLine(oDictionary.Key & oDictionary.Value) < BR >         Next
     End Sub
End Module

Şekil 2 : Dosyadan okunan bilgilerin konsol ekranındaki görünümü

Aykut TAŞDELEN

aykutt@csdos.org