Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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
如何使用C++;读取用Java保存的文件(writeObject)_Java_C++_Binary - Fatal编程技术网

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

如何使用C++;读取用Java保存的文件(writeObject),java,c++,binary,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

这是一个新手类型的问题。我用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;
}  
charbuffstring[50];
字符缓冲区[100];
std::ifstream conFile(configFileName,std::ios::in | std::ios::binary);
//确认读取(缓冲区,100);

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

然而,创建读取这种文件格式的东西并不是那么容易。如果可能,应在Java端使用更可移植的输出格式


(这里有一个关于二进制规范的链接:)

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

我想最好的选择是将文件保存为纯文本。即使只使用Java,我也不建议使用默认对象序列化来存储配置值?我的意思是,意图在这里很重要;键/值对、yaml、xml、json、java对象序列化以外的任何内容如果您无法控制文件的生成,我会编写一个Java程序来读取它,并将所需的信息重新保存为易于阅读的纯文本。Java代码开发为GUI,具有3D几何图形和3D图形,并准备配置文件。然后C++代码使用该配置和根(CERN)数据文件来处理和模拟物理。基于JAVA的代码的意图是来自不同平台的用户可以生成自己的配置,然后他们可以在服务器上运行模拟@生成二进制文件,以便用户在生成后不能对其进行更改。然而,正如建议的那样,似乎我必须保存在文本中。谢谢大家帮我消除了困惑。