異なるバージョン間でのシリアライズの互換性
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(); }