BinaryFormatterを使用してインスタンスをバイナリでシリアライズする。

.Netのシリアライズで最も早く最も効率的なシリアライズはBinaryFormatterを使用したバイナリでのシリアライズです。.Net Remoting などの内部通信形式としても使用されているシリアライズです。XMLシリアライズできないケースに対応するで紹介したシリアライズ不可なケースでも、BinaryFormatterであれば殆どの場合シリアライズ可能なのでフォーマットが問題にならない場合は、BinaryFormatterを使用したシリアライズがお勧めです。

BinaryFormatterでシリアライズしたい場合は、クラスの定義にを付けておきます。


_
Public Class TransferMessage
Public MessageType As MessageType = IPCUtils.MessageType.TextMessage
Public Message As String = String.Empty
Public ItemData As Object = Nothing
End Class

バイナリでのシリアライズはバイナリデータに置き換えられるため今回はMemoryStreamを使用してシリアライズした結果を受け取ります。バイナリなのでByte配列で結果を受け取ります。MemoryStreamのReadメソッドでも取得できるが、ToArrayメソッドを使用すると、Positionを0に設定しなくてもMemoryStreamのすべてのバイナリデータを取得することが出来ます。


Public Sub SendMessage(ByVal item As TransferMessage)

Dim mem As New System.IO.MemoryStream()
Dim bytes() As Byte

Try

Dim b As New BinaryFormatter
b.Serialize(mem, item)

bytes = mem.ToArray

Finally

mem.Close()

End Try

End Sub

シリアライズの例。ToArrayの逆メソッドはないのでWriteメソッドを使用してByte配列をMemoryStreamに書き込みます。


Dim mem As New System.IO.MemoryStream()
Dim item As TransferMessage

Try

mem.Position = 0
mem.Write(bytes, 0, bytes.Length)

Dim b As New BinaryFormatter

mem.Position = 0
item = CType(b.Deserialize(mem), TransferMessage)

Finally

mem.Close()

End Try