Frage

Ich versuche, einige Daten für einen UDP-Paket-Stream zu serialisiert und ich bin einen großen Aufwand von Serialisierung zu bekommen. Wenn ich einen Filedata mit einem 1k Byte-Array kodieren bekomme ich zurück 2312 Bytes. Wie würde ich diesen Aufwand ohne Codierung reduzieren und ich alles Decodierung?

[<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()
War es hilfreich?

Lösung

BinaryFormatter ist wahrscheinlich der knappste Formatierer aus der Box, so dass die einzige Möglichkeit wäre, „do it yourself“.

Der Grund, warum Sie den zusätzlichen Aufwand, wenn es darum hat mit allen anderen Informationen mit Serialisierung gespeichert zu tun. Serialisierung nicht nur die Daten speichern, sie speichert auch die Meta-Daten (dh alle Typen, usw.) in einer Weise, dass das gesamte Objekt sicher rekonstruiert werden. Dies fügt Overhead.

Zum Glück ist der Aufwand nicht wirklich erhöhen, da die Daten größer werden. Wenn Sie einen 2k Byte-Array gespeichert, dann würden Sie wahrscheinlich zurück ~ 3300 Bytes statt dem ~ 2300 Bytes -. Da der Overhead in der Nähe von konstant sein sollte (die Art Angaben nicht ändern)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top