我还没有找到我所遇到的问题的确切答案,所以无论如何我都会问这个问题,如果我这样做了,事实上,重新提出一个已被问过的问题,我道歉.
我正在为我的Java类做另一个实验任务,对于本周的实验,我必须让UDP服务器通过网络发送一个Message对象,然后我必须让UDP客户端读取该消息.Message本身只是一个具有String消息和String用户名的Object; 相当随意.消息是可序列化的.
现在,我遇到的问题是如何实际在DatagramPacket中通过网络发送消息对象?实际的构造函数让我输入一个字节数组,数组的大小,InetAddress和端口号.我的最后一个问题是:如何找出数组的大小,以及如何将我的Message转换为要发送的字节?
您需要将消息类序列化为字节数组.这将是您发送的字节数组(并且在那时很容易获得大小).
在客户端上,您需要将字节数组反序列化为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();
注意,您应该创建一个在客户端和服务器之间共享的公共接口,这样可以轻松地对有效负载进行序列化/反序列化.