質問

私は、UDPパケットストリームのためのいくつかのデータをシリアル化しようとしていると私は直列化からの巨大なオーバーヘッドを取得しています。私は1Kバイト配列でFILEDATAをエンコードした場合、私は戻って2312バイトを取得します。どのように私は自分自身をエンコードせずに、このオーバーヘッドを削減し、すべてのものをデコードするのでしょうか?

[<Serializable>]
type Response =
    | FileSize of String * int64
    | FileData of int64 * byte[]
with
    static member Decode(packet : byte[]) =
        use ms = new MemoryStream(packet)
        let bf = new BinaryFormatter()
        bf.Deserialize(ms) 
        |> unbox<Response>

    member this.Encode() =
        use ms = new MemoryStream()
        let bf = new BinaryFormatter()
        bf.Serialize(ms, this)
        ms.GetBuffer()
役に立ちましたか?

解決

唯一のオプションは、「自分でやる」ことであろうように、

にBinaryFormatterは、おそらくボックスのうち最も簡潔なフォーマッタです。

あなたは余分なオーバーヘッドを取得している理由は、シリアライズして保存された他のすべての情報に関係しています。シリアライズはちょうどそれにもメタデータを格納し、データを保存しません(例:タイプ、などのすべての)オブジェクト全体が安全に再構築することができるような方法インチこれは、オーバーヘッドを追加します。

データが大きくなるにつれて

幸い、オーバーヘッドが実際に増加しません。あなたが2Kバイト配列を保存した場合、あなたはおそらく〜の代わりに〜2300バイトの3300バイトを取り戻すだろう - 。オーバーヘッドはほぼ一定でなければならないので、(変更されない種類の情報を提供)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top