2013-11-02 61 views
1

我目前正在使用點對點「網絡協議」編寫Java遊戲。這意味着我通過網絡將對象發送給其他遊戲。在java對象中存儲版本號

隨着發展繼續我添加和刪除的東西。我改變了遊戲,並最終與舊版本不兼容。

現在我想存儲我通過網絡發送的協議對象中的當前版本號,每當我讓我更改時,我可以更新版本,從而在代碼中檢測兩個遊戲實例是否兼容。

我的問題是:在java中保存版本號的標準類是什麼?

我尋找的東西,提供我重要,次要和修補程序級別版本,媲美等

它相當困難的谷歌這樣的類..

+1

不完全確定,但您可以使用「公共靜態最終int版本」字段。 –

+0

實現'java.io.Serializable'並創建字段generatedGUID。當你改變這個類時,guid應該改變 –

+0

當你說你通過網絡協議發送對象時,你的意思是:1.你是否使用類似'ObjectOutputStream'的東西來通過網絡連接發送數據? 2.您正在創建自己的對象以通過網絡發送?如果是這種情況,您正在創建自己的應用層網絡通信標準,其中您定義了標準。當人們檢查版本號時,單個整數的傳輸足夠好,不需要特殊對象。如果您的遊戲要求特定對象承擔此角色,請創建您自己的角色。 – initramfs

回答

0

的版本控制機制取決於序列化機制你正在使用。如果你使用標準的java序列化,那麼serialVersionUID property表示類的版本。 您指定主要,次要&補丁級別選項相當有限,因爲serialVersionUID的是long

+0

哦,這就是他用這個generatedGUID字段的含義。也許我會去那個,但我仍然在尋找那個標準版本的對象。 – Shylux

+0

我非常肯定,沒有這樣的事情_a標準類來保存java_中的版本號。我仍然不確定你想要實現什麼。你是否試圖實施某種握手機制來確定2個客戶端是否可以相互通信?或者你正在尋找一種方法來對通過網絡發送的每個_data對象進行版本化,然後查看其他客戶端是否可以解釋它? – Pieter

0

AFAIK,這是一個標準的做法,明確包括在你的消息的協議版本號。我建議爲該字段使用字符串,因爲數字字符通常過於嚴格(此外,字符串的使用似乎是現在的事實標準)。

這通常比在對象上具有版本更好,因爲對象上的版本不一定與協議是否兼容。

如果您使用Java序列化進行消息序列化,事情可能會稍微複雜一些,因爲Java序列化有自己的版本控制方案。您可以使用它,但使用獨立的序列化協議(如JSON,XML,protobuf等)可能更容易。