2014-01-12 4 views
-2

Это общий вопрос о Java-сериализации.java serialization, serialVersionUID и версия класса

У меня есть некоторый класс Person.java с 2 строковых полей - имя, фамилия:

public class Person implements Serializable { 

    private static final long serialVersionUID = -460531025539746041L; 

    private String name; 
    private String lastName; 

    public String getName() { 
    return name; 
    } 

    public String getLastName() { 
    return lastName; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

    public void setLastName(String lastName) { 
    this.lastName = lastName; 
    } 

} 

Я сериализацией этого класса, используя некоторый сериалайзер, скажем this one. Я отправляю сериализованные данные на другой сервер через сеть, затем он де-сериализуется на целевом сервере с использованием того же самого сериализатора, насколько это хорошо.

Теперь предположим, что класс Person был изменен (добавлено новое поле). Требуется ли какая-либо адаптация с моего конца (версия мудрая или любой другой аспект), чтобы данные были полностью переданы?

+0

Да, хотя кто-то еще должен будет объяснить детали. Я хотел бы отметить, что это одна из многих причин, почему использование чего-то вроде JSON часто является лучшим вариантом, чем бинарный протокол для конкретной платформы. – chrylis

+0

Чего вы хотите достичь? Должен ли приемник иметь возможность десериализовать то, что вы отправляете, несмотря на то, что у него все еще есть старая версия класса? Обновлен ли класс и на принимающей стороне? Что происходит, когда вы проверяете это? –

+0

@JBNizet Приемник должен иметь возможность получать обновленные данные. Чтобы это произошло, следует ли изменить версию для каждого изменения в классе? и что еще? – forhas

ответ

1

Теперь предположим, что класс Person был изменен (добавлено новое поле). Требуется ли какая-либо адаптация с моей стороны (версия мудрая или любой другой аспект), чтобы данные были полностью переданы?

Нет. Добавление поля является доброкачественным, как и многие другие возможные изменения. См. Versioning of Serialized Objects chapter of the Object Serialization Specification. Не изменяйте также serialVersionUID.

В этой теме много ложных представлений, и некоторые из них появляются прямо здесь, в этой теме. Не верьте тому, что не соответствует спецификации.

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