JavaのserialVersionUIDの真実の意味

1596 ワード

JavaのVoクラスでSerializableタグのシーケンス化が実現されました.
	private static final long serialVersionUID = 1L;

この値はシーケンス化と逆シーケンス化のために使用され、クラスがメソッドを追加したり、プロパティを追加したりした場合、この値を新しく生成する必要があります.この値の生成は、このようなプロパティ、メソッド、クラス名、表示に基づいて生成される唯一のlong型のhash値です.
シーケンス化と逆シーケンス化ObjectOutputStreamとObjectInputStreamを使用
バージョンが同じ場合、シーケンス化後に属性が1つ追加されると、serialVersionUIDが変わらない場合、対応する属性がnullに逆シーケンス化され、バージョンがアップグレードされた場合にエラーが表示されます.
その他のコードは次のとおりです.
class Student implements Serializable {
	private static final long serialVersionUID = -8128337695736294309L;
	private String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + id + "]";
	}

}
  public static void writeObject(Object o) throws Exception {

		File f = new File("d:/user.tmp");

		if (f.exists()) {

			f.delete();

		}
		FileOutputStream os = new FileOutputStream(f);
		ObjectOutputStream oos = new ObjectOutputStream(os);
		oos.writeObject(o);
		oos.close();
		os.close();
	}

  public static Student readObject(File f) throws Exception {
		InputStream is = new FileInputStream(f);
		ObjectInputStream ois = new ObjectInputStream(is);
		return (Student) ois.readObject();
	}