我有一个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 */
但是当收到数据时,会出现“无效标题流”
的异常任何相同的解决方案?
提前致谢
答案 0 :(得分:1)
如果要在C ++和Java之间交换对象数据,则需要使用他们都理解的格式。由C ++序列化的对象将无法读入Java对象,因为它们的语义不同。 一个建议是使用JSON序列化。 C ++应用程序可以输出JSON,可以通过Java代码读回。如果您愿意,可以使用Gson将其读回对象(bean)。
答案 1 :(得分:0)
ObjectInputStream
适用于由ObjectOutputStream.
您应该使用DataInputStream
来读取数据包中的原语。
NB结构序列不是byte stream
,也不是UDP。