这是一个新手类型的问题。我在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
我搜索网时却无法理解。 谢谢和问候
答案 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。