私はDataOutputStreamを介してファイルにデータを書き出す一連のオブジェクトを持っています。java、DataOutputStreamでデータサイズを書き込む
私のアプリケーションファイル形式が進化するにつれて、私はそれ以上のデータオブジェクトを追加します。これは、アプリケーションの "古い"バージョンで読むことができるはずです。
これを行うには、オブジェクトデータの前に、現在のオブジェクトが占有するバイト数を示すサイズ値を設定する必要があります。
しかし、このデータは可変サイズにすることができます。特に文字列を処理する場合、サイズがどのようになるかは事前にわかりません。
それはDataOutputStreamの(特に方法 - のwriteByte、のwriteShort、のwriteInt、のwriteUTF)であるかのようにバイトのバッファへの「事前書き込み」への道があるバイトの長さを取り戻すために私を可能にしますデータをDataOutputStreamに書き出す前にこれにより、古いバージョンのアプリケーションで理解できる新しいデータオブジェクトをスキップすることができます。
自分でオブジェクトをシリアル化していますか、javaのシリアル化を使用していますか? –
データをバイナリ形式で保存する必要がありますか、データオブジェクトをテキストにマーシャリングすることができますか?ジャクソンのような図書館のJSONやYAML?デシリアライゼーションは、重い持ち上げのためにライブラリを使用するときにも非常に簡単になります。 –
自分でシリアル化している場合は、[this](https://github.com/PlutoPowered/Nebula/blob/master/src/main/java/com/gmail/socraticphoenix/nebula/io/Bytes.java)を使用します。 #L29)テクニックを使用して文字列をシリアライズすることもできますが、NULL終了を使用することも可能です –