java - 如果我用 Java 生成二进制文件,我该如何读取 C++ 中的二进制文件?

标签 java c++

我正在研究一种加密算法,我需要用 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++ 兼容,您需要执行以下两项操作之一:

  1. 在理解 ObjectOutputStream 产生的输出格式的 C++ 代码中实现——即在 C++ 中重新实现 Java 在 ObjectInputStream 中所做的事情。不推荐这样做。
  2. 使用标准 FileOutputStream 从 Java 中以定义的序列化格式写出您的数据,然后您的 C++ 代码可以读取这些数据。如何指定和实现这取决于您,但可以非常简单,具体取决于数据的复杂性。

关于java - 如果我用 Java 生成二进制文件,我该如何读取 C++ 中的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57730726/

相关文章:

java - API方法可以返回不同的类型,我如何定义返回类型?

java - 返回类型与继承方法不兼容

java - Tapestry 5.4 Beanedit 表单警报

c++ - 如何在不关闭VTK渲染窗口的情况下使代码流畅?

c++ - 两个瓦片之间的瓦片 map 冲突解决

java - 在 Android Studio 中的 OnClick 类之间共享数组

java找不到符号错误

C++ 如何基于部分特化创建 std::tuple 类型?

c++ - SFML 2.3.2 与 Linux 中的 Qt 5.7 集成

c++ - Boost:仅解析先前声明的变量