VB.Net Tutorial/Stream File/Binary Serialization — различия между версиями

Материал из VB Эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 15:56, 26 мая 2010

Binary serialization and deserialization for a derived Class

<source lang="vbnet">Imports System Imports System.IO Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters.Binary Imports System.Runtime.Serialization.Formatters.Soap Public Class Tester

   Public Shared Sub Main
   
       Dim myClsSerializable As New ClsInherits()
       SerializeBinary(myClsSerializable)
       Console.WriteLine(FileContent(False))
               
       Dim myFileStream As FileStream
       myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
       Dim myFormatter As New BinaryFormatter()
       myClsSerializable = CType(myFormatter.Deserialize(myFileStream), ClsSerializable)
       Console.WriteLine(myClsSerializable.strMessage)
   End Sub
   Private Shared Function FileContent(ByVal blnBinary As Boolean) As String
       Dim strContent As String
       Dim myStreamReader As StreamReader
       Dim myFileStream As FileStream
       Dim i As Integer
       Try
           myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
           If blnBinary = True Then
               For i = 1 To myFileStream.Length
                   strContent += myFileStream.ReadByte.ToString + " "
               Next
           Else
               myStreamReader = New StreamReader(myFileStream)
               strContent = myStreamReader.ReadToEnd
           End If
           myFileStream.Flush()
           myFileStream.Close()
           Return strContent
       Catch ex As IOException
           Console.WriteLine(ex.Message)
       End Try
   End Function
   Private Shared Sub SerializeBinary(ByVal myClsSerializable As ClsSerializable)
       Dim myFileStream As FileStream = New FileStream("test.dat", FileMode.Create, FileAccess.Write)
       Dim myBFormatter As BinaryFormatter = New BinaryFormatter()
       myBFormatter.Serialize(myFileStream, myClsSerializable)
       myFileStream.Flush()
       myFileStream.Close()
   End Sub

End Class <Serializable()> _ Public Class ClsInherits

   Inherits ClsSerializable
   Public intInNumber As Integer
   Public strInMessage As String
   Public Sub New()
       intInNumber = 1024
   End Sub
   Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
       MyBase.New(info, context)
       intInNumber = CInt(info.GetValue("n", intInNumber.GetType))
   End Sub
   Public Overrides Sub GetObjectData _
    (ByVal info As SerializationInfo, ByVal context As StreamingContext)
       MyBase.GetObjectData(info, context)
       info.AddValue("n", intInNumber)
   End Sub

End Class

<Serializable()> _

Public Class ClsSerializable
             
   Implements ISerializable
   Public intNumber As Integer = 1000
   Public strMessage As String = "this is a string"
   Public lngTest As Long
   Public intArrayX(10) As Integer
   Public intArrayY(10) As Integer
   Public Sub New()
       ChangeMmberValue()
   End Sub
   Public Overridable Sub GetObjectData _
    (ByVal info As SerializationInfo, ByVal context As StreamingContext) _
    Implements ISerializable.GetObjectData
       info.AddValue("intNumber", intNumber)
       info.AddValue("message", strMessage)
       info.AddValue("intArrayX", intArrayX)
   End Sub
   Public Sub New _
    (ByVal info As SerializationInfo, ByVal context As StreamingContext)
       intNumber = CInt(info.GetValue("intNumber", intNumber.GetType))
       strMessage = CStr(info.GetValue("message", strMessage.GetType))
       intArrayX = info.GetValue("intArrayX", intArrayX.GetType)
   End Sub
   Public Sub ChangeMmberValue()
       Dim i As Integer
       For i = 0 To 9
           intArrayX(i) = i * 100
       Next i
       intNumber = 2000
       strMessage = "this is another string"
   End Sub

End Class</source>

Binary serialization for a Class with ISerializable implementation

<source lang="vbnet">Imports System Imports System.IO Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters.Binary Imports System.Runtime.Serialization.Formatters.Soap Public Class Tester

   Public Shared Sub Main
   
       Dim myClsSerializable As New ClsSerializable()
       SerializeBinary(myClsSerializable)
       Console.WriteLine(FileContent(False))
               
       Dim myFileStream As FileStream
       myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
       Dim myFormatter As New BinaryFormatter()
       myClsSerializable = CType(myFormatter.Deserialize(myFileStream), ClsSerializable)
       Console.WriteLine(myClsSerializable.strMessage)
               
   End Sub
   Private Shared Function FileContent(ByVal blnBinary As Boolean) As String
       Dim strContent As String
       Dim myStreamReader As StreamReader
       Dim myFileStream As FileStream
       Dim i As Integer
       Try
           myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
           If blnBinary = True Then
               For i = 1 To myFileStream.Length
                   strContent += myFileStream.ReadByte.ToString + " "
               Next
           Else
               myStreamReader = New StreamReader(myFileStream)
               strContent = myStreamReader.ReadToEnd
           End If
           myFileStream.Flush()
           myFileStream.Close()
           Return strContent
       Catch ex As IOException
           Console.WriteLine(ex.Message)
       End Try
   End Function
   Private Shared Sub SerializeBinary(ByVal myClsSerializable As ClsSerializable)
       Dim myFileStream As FileStream = New FileStream("test.dat", FileMode.Create, FileAccess.Write)
       Dim myBFormatter As BinaryFormatter = New BinaryFormatter()
       myBFormatter.Serialize(myFileStream, myClsSerializable)
       myFileStream.Flush()
       myFileStream.Close()
   End Sub

End Class <Serializable()> _

Public Class ClsSerializable
             
   Implements ISerializable
   Public intNumber As Integer = 1000
   Public strMessage As String = "this is a string"
   Public lngTest As Long
   Public intArrayX(10) As Integer
   Public intArrayY(10) As Integer
   Public Sub New()
       ChangeMmberValue()
   End Sub
   Public Sub GetObjectData _
    (ByVal info As SerializationInfo, ByVal context As StreamingContext) _
    Implements ISerializable.GetObjectData
       info.AddValue("intNumber", intNumber)
       info.AddValue("message", strMessage)
       info.AddValue("intArrayX", intArrayX)
   End Sub
   Public Sub New _
    (ByVal info As SerializationInfo, ByVal context As StreamingContext)
       intNumber = CInt(info.GetValue("intNumber", intNumber.GetType))
       strMessage = CStr(info.GetValue("message", strMessage.GetType))
       intArrayX = info.GetValue("intArrayX", intArrayX.GetType)
   End Sub
   Public Sub ChangeMmberValue()
       Dim i As Integer
       For i = 0 To 9
           intArrayX(i) = i * 100
       Next i
       intNumber = 2000
       strMessage = "this is another string"
   End Sub

End Class</source>

Class binary deserialization

<source lang="vbnet">Imports System Imports System.IO Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters.Binary Imports System.Runtime.Serialization.Formatters.Soap Public Class Tester

   Public Shared Sub Main
   
       Dim myClsSerializable As New ClsSerializable()
       SerializeBinary(myClsSerializable)
       Console.WriteLine(FileContent(False))
               
       Dim myFileStream As FileStream
       myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
       Dim myFormatter As New BinaryFormatter()
       myClsSerializable = CType(myFormatter.Deserialize(myFileStream), ClsSerializable)
       Console.WriteLine(myClsSerializable.intNumber.ToString)
       Console.WriteLine(myClsSerializable.lngNumber.ToString)
       Console.WriteLine(myClsSerializable.strDemo)
               
   End Sub
   Private Shared Function FileContent(ByVal blnBinary As Boolean) As String
       Dim strContent As String
       Dim myStreamReader As StreamReader
       Dim myFileStream As FileStream
       Dim i As Integer
       Try
           myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
           If blnBinary = True Then
               For i = 1 To myFileStream.Length
                   strContent += myFileStream.ReadByte.ToString + " "
               Next
           Else
               myStreamReader = New StreamReader(myFileStream)
               strContent = myStreamReader.ReadToEnd
           End If
           myFileStream.Flush()
           myFileStream.Close()
           Return strContent
       Catch ex As IOException
           Console.WriteLine(ex.Message)
       End Try
   End Function
   Private Shared Sub SerializeBinary(ByVal myClsSerializable As ClsSerializable)
       Dim myFileStream As FileStream = New FileStream("test.dat", FileMode.Create, FileAccess.Write)
       Dim myBFormatter As BinaryFormatter = New BinaryFormatter()
       myBFormatter.Serialize(myFileStream, myClsSerializable)
       myFileStream.Flush()
       myFileStream.Close()
   End Sub

End Class <Serializable()> Public Class ClsSerializable

   Public intNumber As Integer = 254
   Public strDemo As String = "This is a poublic  test string"
   Private strpDemo As String = "This is a private  test string"
   <NonSerialized()> Public lngNumber As Long = 123456


End Class</source>

Class binary Serialization

<source lang="vbnet">Imports System Imports System.IO Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters.Binary Imports System.Runtime.Serialization.Formatters.Soap Public Class Tester

   Public Shared Sub Main
   
       Dim myClsSerializable As New ClsSerializable()
       SerializeBinary(myClsSerializable)
       Console.WriteLine(FileContent(False))
               
       Dim myFileStream As FileStream
       myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
       Dim myFormatter As New BinaryFormatter()
       myClsSerializable = CType(myFormatter.Deserialize(myFileStream), ClsSerializable)
       Console.WriteLine(myClsSerializable.intNumber.ToString)
       Console.WriteLine(myClsSerializable.lngNumber.ToString)
       Console.WriteLine(myClsSerializable.strDemo)
               
   End Sub
   Private Shared Function FileContent(ByVal blnBinary As Boolean) As String
       Dim strContent As String
       Dim myStreamReader As StreamReader
       Dim myFileStream As FileStream
       Dim i As Integer
       Try
           myFileStream = New FileStream("test.dat", FileMode.Open, FileAccess.Read)
           If blnBinary = True Then
               For i = 1 To myFileStream.Length
                   strContent += myFileStream.ReadByte.ToString + " "
               Next
           Else
               myStreamReader = New StreamReader(myFileStream)
               strContent = myStreamReader.ReadToEnd
           End If
           myFileStream.Flush()
           myFileStream.Close()
           Return strContent
       Catch ex As IOException
           Console.WriteLine(ex.Message)
       End Try
   End Function
   Private Shared Sub SerializeBinary(ByVal myClsSerializable As ClsSerializable)
       Dim myFileStream As FileStream = New FileStream("test.dat", FileMode.Create, FileAccess.Write)
       Dim myBFormatter As BinaryFormatter = New BinaryFormatter()
       myBFormatter.Serialize(myFileStream, myClsSerializable)
       myFileStream.Flush()
       myFileStream.Close()
   End Sub

End Class <Serializable()> Public Class ClsSerializable

   Public intNumber As Integer = 254
   Public strDemo As String = "This is a poublic  test string"
   Private strpDemo As String = "This is a private  test string"
   <NonSerialized()> Public lngNumber As Long = 123456


End Class</source>