我还没有找到我遇到的问题的确切答案,所以无论如何我都会问这个问题,如果我这样做了,事实上,重新提出一个已被问过的问题,我道歉。< / p>
我正在为我的Java类做另一个实验任务,对于本周的实验,我必须让UDP服务器通过网络发送一个Message对象,然后我必须让UDP客户端读入信息。 Message本身只是一个具有String消息和String用户名的Object;相当随意。消息是可序列化的。
现在,我遇到的问题是如何实际在DatagramPacket中通过网络发送消息对象?实际的构造函数让我输入一个字节数组,数组的大小,InetAddress和端口号。我的最后一个问题是:如何找出数组的大小,以及如何将Message转换为要发送的字节?
答案 0 :(得分:8)
您需要将消息类序列化为字节数组。这将是您发送的字节数组(此时很容易获得大小)。
在客户端上,您需要将字节数组反序列化为Message对象。
Java提供了一组用于处理序列化/反序列化的类,要序列化的对象必须实现“Serializable”接口。
这样的事情会起作用:
// Serialize to a byte array
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
ObjectOutput oo = new ObjectOutputStream(bStream);
oo.writeObject(messageClass);
oo.close();
byte[] serializedMessage = bStream.toByteArray();
在接收端:
ObjectInputStream iStream = new ObjectInputStream(new ByteArrayInputStream(recBytes));
Message messageClass = (Message) iStream.readObject();
iStream.close();
注意,您应该创建一个在客户端和服务器之间共享的公共接口,这样可以轻松地对有效负载进行序列化/反序列化。