Thread serial, dump - Komplexe Datenstrukturen speichern und ausgeben
(12 answers)
Opened by mika at 2012-03-03 14:55 Quote Nein ;) Beim Serialisieren von Daten in Byte-Sequenzen wird mit Längenangaben gearbeitet, nicht mit 'Marker' oder Tokens. Entscheidend für die Umkehrung (deserialize) ist, dass jede Längenangabe eine konstante Anzahl an Bytes haben muss, dies ermöglichst die pack() Funktion mit einer geeigneten Schablone. Mit Schablone "N" hat z.B. jede numerische Längenangabe (integer) genau 4 Bytes. Eine serialisierte Liste könnte z.B. wie folgt in einer Sequenz abgelegt sein: [bbbb]foo[bbbb]bar[bbbb]baz[bbbb]fox wobei [bbbb] ist die jeweilige Längenangabe für das folgende Listenelement. Deserialize: Mit read() werden 4 bytes gelesen, nach unpack() steht die Länge für das folgende Listenelement fest, dann werden diese 3 bytes gelesen ('foo') und danach wiederholt sich das. Serialize Code (perl): (dl
)
1 2 use bytes; # wichtig für length() $handle->print(pack("N", length($_)).$_) for @liste; Beim Entwurf solcher Algorithmen also immer den Umkehrprozes im Hinterkopf behalten. --Rosti Last edited: 2012-03-04 09:54:44 +0100 (CET) |