在Java程序中通过UDP接收C ++字节流

时间:2015-05-25 06:21:42

标签: java c++ udp

我有一个c ++应用程序通过UDP发送字节缓冲区(从结构填充)。 Java中的另一个应用程序接收相同的缓冲区并将数据复制到类(Java Bean类)中。

我使用了以下代码

                byte[] data = packet.getData();
                ByteArrayInputStream in = new ByteArrayInputStream(data);
                ObjectInputStream is = new ObjectInputStream(in);

                ClickData = (CLICK_ID) is.readObject(); /* CLICK_ID is JAVA CLASS */

但是当收到数据时,会出现“无效标题流”

的异常

任何相同的解决方案?

提前致谢

2 个答案:

答案 0 :(得分:1)

如果要在C ++和Java之间交换对象数据,则需要使用他们都理解的格式。由C ++序列化的对象将无法读入Java对象,因为它们的语义不同。 一个建议是使用JSON序列化。 C ++应用程序可以输出JSON,可以通过Java代码读回。如果您愿意,可以使用Gson将其读回对象(bean)。

答案 1 :(得分:0)

ObjectInputStream适用于由ObjectOutputStream.

撰写的流

您应该使用DataInputStream来读取数据包中的原语。

NB结构序列不是byte stream,也不是UDP。