2013-11-02 1 views
1

В настоящее время я пишу Java-игру с одноранговым «сетевым протоколом». Это означает, что я отправляю объект по сети в другую игру.Номер версии магазина в java-объекте

По мере развития я добавляю и удаляю вещи. Я меняю игру, и она становится несовместимой со старыми версиями.

Теперь я хочу сохранить текущий номер версии в объекте протокола, который я отправляю по сети, и каждый раз, когда я меняю, я могу обновить версию и таким образом обнаружить код, если оба экземпляра игры совместимы.

Мой вопрос: Что такое стандартный класс для сохранения номера версии в java?

Я ищу что-то, который предоставляет мне версии крупного, малого и патч уровня, сравним и т.д.

Его довольно трудно Google такого класса ..

+1

Не совсем уверен, но вы можете использовать поле 'public static final int version'. –

+0

реализовать 'java.io.Serializable' и создать поле сгенерированное. когда вы меняете класс, руководство должно изменить –

+0

Когда вы говорите, что отправляете объекты по сетевому протоколу, вы имеете в виду: 1. Что вы используете что-то вроде «ObjectOutputStream» для передачи данных по сетевому соединению? 2. Вы создаете свои собственные объекты для отправки по сети? Если это так, вы создаете собственный стандарт сетевой коммуникации на уровне приложения, в котором вы определяете стандарт. Когда люди проверяют номера версий, передача одного целого достаточно, никаких специальных объектов не требуется. Если ваша игра требует определенного объекта для выполнения этой роли, создайте свой собственный. – initramfs

ответ

0

Механизма управления версий зависит от сериализации механизма вас используются. Если вы используете стандартную сериализацию java, то serialVersionUID property указывает версию класса. Ваши варианты для определения основных, незначительных уровней & патча довольно ограничены, поскольку serialVersionUID является long

+0

О, вот что он имел в виду с этим сгенерированным полем GUID. Возможно, я поеду с этим, но я все еще ищу этот объект стандартной версии. – Shylux

+0

Я уверен, что нет такой вещи, как стандартный класс, чтобы сохранить номер версии в java_.Я еще не совсем уверен, чего вы пытаетесь достичь. Вы пытаетесь реализовать какой-то механизм рукопожатия, который определяет, могут ли два клиента взаимодействовать друг с другом? Или вы ищете способ реализовать каждый _data object_, который вы отправляете по сети, а затем посмотреть, может ли другой клиент интерпретировать его? – Pieter

0

AFAIK, это стандартная практика, чтобы явно включать в протокол номер версии в ваших сообщениях. Я бы рекомендовал использовать строку для этого поля, поскольку числовые часто слишком ограничительны (кроме того, использование строки, по-видимому, является стандартом де-факто в настоящее время).

Это обычно лучше, чем наличие версий для объектов, поскольку версии на объектах не обязательно соответствуют тому, совместим ли протокол .

Если вы используете сериализацию Java для сериализации сообщений, все может немного усложниться, поскольку сериализация Java имеет свою собственную схему управления версиями. Вы можете работать с этим, но может быть проще использовать независимый протокол сериализации (например, JSON, XML, protobuf и т. Д.)