JavaのserialVersionUIDの真実の意味
1596 ワード
JavaのVoクラスでSerializableタグのシーケンス化が実現されました.
この値はシーケンス化と逆シーケンス化のために使用され、クラスがメソッドを追加したり、プロパティを追加したりした場合、この値を新しく生成する必要があります.この値の生成は、このようなプロパティ、メソッド、クラス名、表示に基づいて生成される唯一のlong型のhash値です.
シーケンス化と逆シーケンス化ObjectOutputStreamとObjectInputStreamを使用
バージョンが同じ場合、シーケンス化後に属性が1つ追加されると、serialVersionUIDが変わらない場合、対応する属性がnullに逆シーケンス化され、バージョンがアップグレードされた場合にエラーが表示されます.
その他のコードは次のとおりです.
public static Student readObject(File f) throws Exception {
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();
}