Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Java对象转换为C++;对象_Java_C++_Serialization - Fatal编程技术网

如何将Java对象转换为C++;对象

如何将Java对象转换为C++;对象,java,c++,serialization,Java,C++,Serialization,我的问题是这样的。我序列化了存储在文件中的二进制Java对象。我需要重构C++中的对象并进行进一步的处理。 我想我可以用java反序列化java对象,再序列化到ACSII文件中,然后加载C++代码。而且,我知道使用JNI调用C++函数可以实现java,但是我不知道如何传递参数,也就是说,将对象返回到C++。但是有更好的办法吗 谢谢 当一个对象被序列化到一个流时,它会丢失关于源语言的信息,实际上成为一个独立于语言的数据块。所以你的问题不是从java转换成C++,而是把二进制的数据块转换成C++中的

我的问题是这样的。我序列化了存储在文件中的二进制Java对象。我需要重构C++中的对象并进行进一步的处理。

我想我可以用java反序列化java对象,再序列化到ACSII文件中,然后加载C++代码。而且,我知道使用JNI调用C++函数可以实现java,但是我不知道如何传递参数,也就是说,将对象返回到C++。但是有更好的办法吗


谢谢

当一个对象被序列化到一个流时,它会丢失关于源语言的信息,实际上成为一个独立于语言的数据块。所以你的问题不是从java转换成C++,而是把二进制的数据块转换成C++中的对象表示。当然blob是用Java序列化的,但这与反序列化过程无关。现在,你需要做的是找出数据的格式,因为它是序列化的,并用C++编写代码来反序列化它。如果你幸运的话,序列化可能是使用XML序列化完成的,在这种情况下,使用C++端上的XML库来反序列化是微不足道的。

尽管我不知道有什么方法来完成你所说的。如果我处在您的位置,我会将每个对象的描述写入一个文本/二进制文件。然后,用C++读取描述并填空。

也许你可以用java编写一个程序来读取(反序列化)这些对象,然后使用OntBuFF将它们序列化。http://code.google.com/p/protobuf/对某些文件,可以将其反序列化为C++对象。

如果你觉得足够勇敢,您可以查看java序列化,并为java序列化数据编写C++解析器。 路由工作,但最终是java对象,不是C++对象。因此,C++代码基本上必须对VM进行大量调用来操纵数据(尽管您可以这样做,只是为了获取对象的字段并将其复制到C++对象)。


<>如果在C++中编写java unMalSalver听起来很麻烦,你可以按照自己的建议编写一个java程序,将数据写入一个可以很容易地从C++中解析的格式。但是现在您正在编写封送器(Java)和解封器(C++),如果您没有封送器,那么解析Java序列化格式可能会更容易。

正如sashang所说,数据只是对象的转储,不存在它归Java所有的情况。如果您理解格式,可以完全在C++中对数据进行反序列化。虽然我不知道格式,但我认为最好用java来实现它,并将对象传递回C++。您的代码将更加健壮,不必重新创建轮子。

< P>您可以直接打开序列化文件,并从C++中提取数据。您可以看到规范,但我建议您开始阅读类似的文章


java java,C++,C++,P>但是,更容易的,对我来说更好的方法是将对象再次加载到Java中,并将它转换成其他格式,例如JSON和Java库,或者其他的,然后打开到C++中。现在,我衷心推荐使用GoogleProtocolBuffers(),这是一种机制,您可以以独立于平台和语言的方式定义消息,然后随意进行序列化和反序列化。因此,您可以:1)反序列化Java中的当前格式。2) 将数据复制到protobuf消息中。3) 将其序列化为数组(或字符串)。4)将其传递给C++。5)在C++中对消息进行反序列化。6)要么使用C++原始Bufff消息作为C++对象,要么将数据复制到您定义的任何C++对象。