如何使用C ++读取用Java保存的文件(writeObject)

时间:2016-03-26 21:41:51

标签: java c++ binary

这是一个新手类型的问题。我在java中使用writeObject方法保存了一个文件。我需要使用C ++来阅读基于C ++的代码。我尝试使用二进制文件读取方法读取,但我无法正确读取。

char buffString[50];

char buffer[100]; 
std::ifstream conFile(configFileName, std::ios::in|std::ios::binary);
//conFile.read(buffer, 100);
std::cout << buffer << std::endl;
if (!conFile) {
    std::cout << " Error reading thee file " << std::endl;
} else {
    std::cout << "Trying to read." << std::endl;
    conFile.seekg(0);
    conFile.read(buffer,14);  strcpy(buffString, buffer);
    std::cout << buffString << "   buffer " << buffer << std::endl;
}  

此conFile指向的数据文件包含字符串,整数和双精度型。该文件包含以下内容:

  

trapezDET.pngtcmstMeVsrjava.lang.DoubleJ)kDvaluexrjava.lang.Number                                                                                     xp@ dsq~ @ Nsq~ @ dsq~ @V srjava.lang.Integer⠤ 8Ivaluexq~sq~? sq~sq~?ə sq~q~sq~@ F平方〜?平方〜?平方〜?平方〜?ZG {T5 /家/维加/的NetBeansProjects /汤姆/数据/ 6133.root

我搜索网时却无法理解。 谢谢和问候

2 个答案:

答案 0 :(得分:2)

Java序列化规范定义很好。我认为这是最新的规范:

https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html

然而,创建读取此文件格式的内容并不是非常容易。如果可能,应该在Java端使用更便携的输出格式。

(这里是指实际讨论二进制规范的部分的链接:https://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html

答案 1 :(得分:1)

你可以为像java.lang.String这样的简单和固定类做到这一点,但总的来说答案是你做不到。通常,您需要一个JVM来解码这样的文件。原因是任何类都可以定义自己的序列化子协议,只有该类中的代码知道该子协议是什么,执行该代码的唯一方法是使用JVM。