Ich habe eine Reihe von Objekten, die ihre Daten über DataOutputStream in eine Datei schreiben.Java, Datengröße schreiben mit DataOutputStream
Während sich mein Anwendungsdateiformat entwickelt, werde ich weitere Datenobjekte hinzufügen, die von "älteren" Versionen der Anwendung gelesen werden können.
Um dies tun zu können, muss ich den Objekten Daten mit einem Größenwert voranstellen, der die Anzahl der Bytes angibt, die das aktuelle Objekt aufnehmen wird.
Da diese Daten jedoch eine variable Größe haben können, insbesondere beim Umgang mit Strings, kann ich nicht im Voraus wissen, wie groß die Größe sein wird.
Gibt es eine Möglichkeit zu einem Byte-Puffer zu „pre-write“, als ob es ein Dataoutputstream waren (Methoden insbesondere - writeByte, writeshort, writeInt, writeUTF), die es mir ermöglichen, die Byte-Länge, um wieder der Daten vor dem Schreiben in den DataOutputStream? Dadurch kann ich neuere Datenobjekte überspringen, die ältere Versionen der Anwendung verstehen.
Serialisieren Sie Objekte selbst oder verwenden Sie die eingebaute Serialisierung von Java? –
Müssen Sie die Daten im Binärformat speichern oder können Sie Ihre Datenobjekte in Text mappen, z. JSON oder YAML mit einer Bibliothek wie Jackson? Die Deserialisierung sollte auch sehr einfach werden, wenn eine Bibliothek für das schwere Heben verwendet wird. –
Wenn Sie es selbst serialisieren, verwende ich [dies] (https://github.com/PlutoPowered/Nebula/blob/master/src/main/java/com/gmail/socraticphoenix/nebula/io/Bytes.java # L29) Technik, um Strings zu serialisieren, aber Sie könnten möglicherweise null Terminierung auch verwenden –