2009-12-17 36 views
0

我在http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java上使用Mersenne-Twister實現作爲默認java.util.Random類的直接替換。但是,四個字段(一個int,一個布爾值和兩個字節[])被標記爲transient。這意味着我不能在不實現自定義功能的情況下序列化此類的對象。這個類爲什麼不是可串行化的?

問題是,是否有任何理由將這些字段標記爲瞬態?是否有任何代碼保存從文件讀入對象時沒有任何意義的信息?我從字段中刪除了transient修飾符,它似乎工作正常,但我沒有對它進行過深入的測試,因此可能會出現這種情況:

個人而言,我不明白爲什麼,因爲所有在課堂上做的都是算術。

回答

-1

最有可能的背後使transient的非靜態字段的所有的理由是,這樣的MTRandom類保持二進制與java.util.Random,從它擴展兼容。

因此理論上,您可以序列化一個MTRandom實例,並將其反序列化爲Random實例,並且所有內容都可以工作。

如果這些字段不是transient,那麼它們將被序列化並變得不兼容。

但是,據我所知,去除瞬變不應該爲您造成問題。

+1

它不保持「二進制兼容」。 Java序列化的確有點像這樣工作。 – 2009-12-17 12:37:12

2

從對serialVersionUID的評論看來,作者並不想考慮序列化。添加transient可能會抑制一些編譯器/ IDE警告。