JAvaオブジェクトシーケンス化の使用
JAvaシーケンス化の使用は、クラス定義時にjava.io.serializableを実装すれば簡単です.このインタフェースを拡張するには、その方法を実装する必要はありません.Javaは自動的にシーケンス化されます.transientとstaticとマークされたプロパティはjavaによって自動的にシーケンス化されないことに注意してください.
複雑なオブジェクト、たとえば双方向リンク関係のあるオブジェクトに直面した場合、インタフェースが実装されるとjavaはシーケンス化時にスタックオーバーフローし、オブジェクトが大きい場合はスタックオーバーフローします.では、この時、私たちは自分でシーケンス化の方法を書く必要があります.
1つ目のカスタムシーケンス化方法:
1、クラス定義拡張java.io.serializableインタフェース;
2、クラスでの実現方法は以下の通りである.
private void writeObject(java.io.ObjectOutputStream out) throws IOException{
out.defaultWriteObject(); // java , transient static
//TODO : transient static
}
private void readObject(java.io.ObjectInputStream in) throws ClassNotFoundException, IOException{
in.defaultReadObject();
//TODO: writeObject
}
2つ目の実装方法:
1、クラス定義拡張java.io.Externalizableインタフェース;
2、クラスでの実現方法は以下の通りである.
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
//TODO: writeExternal
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
//TODO:
}
第1の方法では、方法はprivateであり、javaはreadObjectおよびwriteObjectメソッドを反射することによってシーケンス化および逆シーケンス化プロセスを完了することに注意する必要がある.また,第1の方式では,方法の実現は必須ではなく,第2の方式では方法を実現しなければならない.
もう一つのシーケンス化の経験は、シーケンス化が必要なコンテンツが大きすぎて、重複するコンテンツが多い場合は、HashMapを新規作成し、重複する可能性のあるコンテンツを保存しやすく、スペースの小さい整形、バイト、文字などにマッピングすることです.writeUTF、writeObjectの代わりにwriteInt、writeByteをできるだけ多く使用します.シーケンス化されたコードは、複数のローを簡略化するために、シーケンス化された結果ファイルサイズ、(逆)シーケンス化された時間を何倍も短縮することができます.
本文は“winger”のブログから出て、転載をお断りします!