argius note

プログラミング関連

異なるバージョン間でのシリアライズの互換性

serialVersionUIDが同じなら互換性ある、というところは知っていたけど、実際にどうなるのかは知らなかったので、試してみた。
先に結論を言ってしまうと、少なくともJava1.3と1.6間では互換性がある、というか全く同じ。

同じ内容のオブジェクトを、Java1.3とJava1.6でシリアライズした結果は、同じデータができる。ということは、読み込みも問題なくできるということ。と言っても、完全に一致しているかどうかは調べていない。
確認には、下記のコードを使用した。

// serialize
String fileName;
if (System.getProperty("java.version").startsWith("1.3")) {
    fileName = "a1.dat"; // 1.3
} else {
    fileName = "a2.dat"; // not 1.3
}
HashMap hm = new HashMap();
hm.put("alphabet", "ABCDE");
hm.put("number", new Integer(12345));
try {
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName));
    try {
        oos.writeObject(hm);
    } finally {
        oos.close();   
    }
} catch (IOException ex) {
    ex.printStackTrace();
}
// deserialize
try {
    String[] fileNames = {"a1.dat", "a2.dat"};
    for (int i = 0; i < fileNames.length; i++) {
        String fn = fileNames[i];
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fn));
        try {
            Object o = ois.readObject();
            System.out.println(o);
        } finally {
            ois.close();   
        }
    }
} catch (ClassNotFoundException ex) {
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}