我正在尝试用 Java 制作一个小型多人游戏。我得到了 tpc 连接工作,但现在我只能传输字符串。我想以数据包的形式传输更复杂的数据,其中包含同步游戏所需的所有数据。是否可以在一个 tcp 包中传输某种自定义结构或来自类实例的数据?或者有什么好方法(我用谷歌搜索,但找不到适合我需要的东西)?
4 回答
一般来说,这里要查找的关键字是serialization。这是将数据结构转换为可以通过套接字或其他传输介质发送的字节块的过程。
一种方法是使用Google Protocol Buffers库,该库具有与 Java 一起使用的绑定。
最基本但不是最佳的方法是使用Serializable -marker 接口,例如参见此处:Discover the secrets of the Java Serialization API。
-如果您对穿过套接字的普通字符串不满意,则可以使用Serialization
.
- Serialization
必须在使用同一个 java 程序写入和读取数据时使用。
- 分别在存储和检索时Serialization
展平和膨胀对象。
-它实际上不是对象,但它Instance variables
被用来保存并稍后用于在堆上复活一个相同的对象......
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 类型。