シリアル化されたオブジェクトの使用済みサイズの合計を、逆シリアル化の前または後にストリームから読み取る方法はありますか?
私が見つけた唯一の方法は、それを再度バイトバッファーにシリアル化し、そのバッファーの合計占有サイズを確認することでした。これは機能しますが、リソースの浪費のようです。
編集:オブジェクトインスタンスがメモリにロードされているときに使用するスペースには興味がありません。バイト単位のシリアル化されたサイズのみ。
シリアル化されたオブジェクトの使用済みサイズの合計を、逆シリアル化の前または後にストリームから読み取る方法はありますか?
私が見つけた唯一の方法は、それを再度バイトバッファーにシリアル化し、そのバッファーの合計占有サイズを確認することでした。これは機能しますが、リソースの浪費のようです。
編集:オブジェクトインスタンスがメモリにロードされているときに使用するスペースには興味がありません。バイト単位のシリアル化されたサイズのみ。
シリアル化プロトコルは出力のサイズを事前に計算する時間を無駄にしないため、逆シリアル化の前にサイズを決定することはできません。完了するまでオブジェクトを処理するだけです。
逆シリアル化後にサイズを読み取るには、あなたと基礎となるストリームの間にCountingInputStreamを挿入できます。ObjectInputStream
編集:サイズの事前シリアル化を絶対に決定する必要がある場合は、にシリアル化しByteArrayOutputStream
、結果のバイトを出力に書き込むことができると思います。ただし、それには、送信者と受信者の両方がバイトの処理方法に同意する必要があります。
シリアル化されたサイズは、そのすべてのフィールドとそれ自体の合計です。オブジェクトのサイズを確認する良い方法があると思いますので、オブジェクトのサイズを確認し、それにすべてのフィールドを追加します。