我正在尝试用Java制作一个小型多人游戏。我得到了tpc连接,但是现在我只能传输字符串。我想在数据包中传输更复杂的数据,其中包含用于同步游戏的所有必要数据。是否可以在一个tcp包中传输某种自定义结构或类实例中的数据?或者什么是一个好方法(我谷歌搜索但我找不到符合我需要的东西)?
答案 0 :(得分:2)
通常,要查找的关键字是serialization。这是将数据结构转换为可以通过套接字或其他传输介质发送的字节块的过程。
执行此操作的一种方法是使用Google Protocol Buffers库,该库具有与Java一起使用的绑定。
答案 1 :(得分:1)
最基本但非最佳的方法是使用Serializable - 标记界面,例如,请参阅:Discover the secrets of the Java Serialization API。
更好的方法是使用一些binary protocol,请参阅此处了解一些示例:general-purpose binary protocols或自己烹饪。
答案 2 :(得分:0)
- 如果您对插入套接字的普通字符串不满意,可以使用Serialization
。
- Serialization
。
- Serialization
分别在存储和检索时展平和膨胀对象。
- 它实际上不是对象,但它的Instance variables
被保存,后来用于复活堆上的相同对象.... / p>
答案 3 :(得分:0)
I would like to transmit more sophisticated data in packets, which would contain all the necessary data for synchronizing the game.
如果这些数据是Serializable
(例如,您的数据只包含基元,字符串和基元数组或字符串数组),那么您可以使用Collection
这样的标准Vector
},List
,Map
等来保存您的数据。它们是可序列化的(请查看其文档)。所以你需要使用它:
objectOutputStream.writeObject(data)
假设您使用ObjectOutputStream
发送数据包。但是,如果您不需要创建自己的自定义数据结构,则需要使用java.io.Serializable
对其进行标记,正如其他人指出的那样。
注意:在实现Serializable的类中,您必须确保每一个 该类的实例变量是Serializable类型。