2009-12-17 6 views
0

Я использовал реализацию Mersenne-Twister на http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVA/MTRandom.java в качестве замены в качестве замены для класса java.util.Random по умолчанию. Однако четыре поля (int, логический и два байта []) помечены как transient. Это означает, что я не могу сериализовать объект этого класса без реализации пользовательских функций.Почему этот класс не Сериализуем?

Вопрос в том, есть ли причина, по которой эти поля отмечены переходными? Есть ли там какой-нибудь код, который содержит информацию, которая не имеет никакого смысла, когда объект считывается из файла? Я удалил модификатор transient из полей, и, похоже, он работает нормально, но я не тестировал его интенсивно, и могут ли быть случаи, когда он ломается?

Лично я не понимаю, почему, поскольку все, что сделано в классе, является арифметическим.

ответ

-1

Скорее всего, обоснование решений все из нестатических полей класса transient было так, что MTRandom класс остается двоично-совместимой с java.util.Random, из которого он продлен.

Итак, теоретически вы можете сериализовать экземпляр MTRandom и десериализовать его как экземпляр Random, и все будет работать.

Если эти поля не являются transient, тогда они будут сериализованы и станут несовместимыми.

Однако, насколько я могу судить, удаление переходных процессов не должно вызывать проблем для вас.

+1

Он не остается «бинарным совместимым». Сериализация Java работает так. –

2

Из комментария serialVersionUID, похоже, автор не хотел рассматривать сериализацию. Добавление transient может быть подавлено некоторыми предупреждениями компилятора/IDE.

Смежные вопросы