JAvaオブジェクトシーケンス化の使用

1646 ワード


    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”のブログから出て、転載をお断りします!