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 ByteTry
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 TransferMessageTry
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