我正在研究一种加密算法,我需要用 Java(一个二进制文件)生成一些信息以便用 C++ 读取。
我不确定问题是我如何创建二进制文件还是我如何读取它,尽管我可以完美地读取 Java 中的信息。
所以我做了一个简单的测试。在 Java 中,我将数字 9 保存到一个二进制文件中,然后我尝试在 C++ 中读取它,但它读取的不是数字。
谁能告诉我该怎么做?
Java代码:
int x = 9;
try{
ObjectOutputStream salida=new ObjectOutputStream(new
FileOutputStream("test.bin"));
salida.writeInt(x);
salida.close();
System.out.println("saved");
} catch(Exception e){
System.out.println(e);
}
C++代码:
streampos size;
char * memblock;
ifstream file ("test.bin", ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
cout<< size << endl;
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();
int i;
for (i = 0; i < sizeof(memblock); i++)
{
cout << memblock[i] <<endl;
}
delete[] memblock;
}
else cout << "Unable to open file";
这是输出:
�
�
w
最佳答案
您的问题是您正在使用 ObjectOutputStream
写入数据。这会以特定于 Java 的形式对对象图进行编码,以便使用 ObjectInputStream
读取。要使数据流与 C++ 兼容,您需要执行以下两项操作之一:
- 在理解
ObjectOutputStream
产生的输出格式的 C++ 代码中实现——即在 C++ 中重新实现 Java 在ObjectInputStream
中所做的事情。不推荐这样做。 - 使用标准
FileOutputStream
从 Java 中以您定义的序列化格式写出您的数据,然后您的 C++ 代码可以读取这些数据。如何指定和实现这取决于您,但可以非常简单,具体取决于数据的复杂性。
关于java - 如果我用 Java 生成二进制文件,我该如何读取 C++ 中的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57730726/