Java序列化 跨网络,在Java中使用UDP跨网络发送对象

I haven't found an exact answer to the problem that I'm having, so I'm going to ask this anyway, and if I did, in fact, repost a question that's already been asked, I apologize.

I'm doing another lab assignment for my Java class, and for this week's lab, I have to make a UDP server to send out a Message object across the network, then I have to make a UDP client to read in that Message. The Message itself is just an Object that has a String message and a String username; fairly arbitrary. Message is Serializable.

Now, what I'm having an issue with is how to actually go about sending that Message Object across the network within a DatagramPacket? The actual constructor has me put in a byte array, the size of the array, the InetAddress, and the port number. My final question is: how to I find out the size of the array, and how to I turn my Message into bytes to be sent out?

解决方案

You need to serialize your message class into a byte array. This will be the byte array you send (and it will be easy to get the size at that point).

On the client, you will want to deserialize the byte array back into a Message object.

Java provides a set of classes to handle serialization/deserialization, and the object you want to serialize must implement the "Serializable" interface.

Something like this would work:

// Serialize to a byte array

ByteArrayOutputStream bStream = new ByteArrayOutputStream();

ObjectOutput oo = new ObjectOutputStream(bStream);

oo.writeObject(messageClass);

oo.close();

byte[] serializedMessage = bStream.toByteArray();

And on the receiving end:

ObjectInputStream iStream = new ObjectInputStream(new ByteArrayInputStream(recBytes));

Message messageClass = (Message) iStream.readObject();

iStream.close();

Note, you should create a common interface that is shared between the client and the server, this will allow for easy serialization/deserialization of the payload.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值