2010-08-25 13 views
8

Ich möchte eine Grafik von verschiedenen Objekten für ein Spiel speichern, ihre Klassen können miteinander verwandt sein oder nicht, sie können Vektoren von einfachen Strukturen enthalten oder nicht.Binärer Parser oder Serialisierung?

  • Ich möchte Parsing-Vorgang schnell sein, Daten können ziemlich groß sein.
  • Hinzufügen neuer Dinge sollte nicht schwer sein, und es sollte keine Abwärtskompatibilität brechen.
  • kleinere Dateigröße ist eine Art wichtigen
  • Ablesbarkeit zählt

Durch Serialisierung Ich meine, so dass Objekte serialisiert selbst, die wirksam ist, aber ich werde verschiedene Serialisierungsmethoden für verschiedene Objekte für das schreiben muß.

Durch binäres Parsing/Composing meine ich, eine neue Struktur von Parsern/Komponisten zu erstellen, die Daten für diese Objekte halten und lesen, und diese herumreichen, damit meine Objekte ihre Daten pushen/ziehen.

Ich kann auch Json verwenden, aber es kann ziemlich langsam zum Lesen sein, und es ist nicht sehr effektiv, wenn es um ziemlich große Sätze von Matrizen und Zahlen geht.

+0

Ich endete Schreiben s einfache binäre Parser, ich konstruiere den Strukturbaum und push einfache Daten oder andere Datensätze, thit kann auch Json Text generieren, wenn gewünscht, muss ich ToJson Methoden definieren, aber zumindest ist meine Struktur gut definiert, wirtschaftlich und leicht zu analysieren ohne die Parser-Bibliothek. –

Antwort

3

Punkt für Punkt:

  • Schnelles Parsing: binary (da man nicht unbedingt haben zu "analysieren", können Sie einfach deserialisieren)
  • Hinzufügen neue Dinge: Text
  • Kleine: Text (Auch wenn der Text mit gzip größer als binär ist, wird er nicht viel größer sein).
  • Ablesbarkeit: Text

das ist also drei Stimmen für Text, einen Punkt für binär. Persönlich würde ich mit Text für alles außer Bilder gehen (und andere Daten, die "natürlich" binär sind). Dann speicher alles in einer großen Zip-Datei (ich kann mir vorstellen, dass mehrere Spiele dies oder etwas ähnliches tun).

Gut liest: The Importance of Being Textual und Power Of Plain Text.

1

Überprüfen Sie Protokollpuffer von Google oder Sparsamkeit von Apache. Obwohl es sich um eine einfache Möglichkeit zum Schreiben von Drahtprotokollen handelt, handelt es sich im Grunde um einen Objektserialisierungsmechanismus, der Bindungen in Dutzenden von Sprachen erstellen, eine effiziente Binärdarstellung, einfache Versionierung, schnelle Leistung und eine gute Unterstützung bietet.

+0

scheint ziemlich nett, ich werde es überprüfen. –

+0

Nun, es ist nicht für Nachrichten mehr als 1mb empfohlen, einzelne Mesh-Daten können dies leicht überschreiten, Tauchdaten erfordern unterschiedliche Baumstruktur für Nachrichten, die Dinge komplizieren können. –

0

Wir verwenden Boost.Serialization. Ich weiß nicht, wie es neben den Angeboten von samkass funktioniert.