在Cpp中存储可读的java字节数组

在Cpp中存储可读的java字节数组,java,c++,arrays,binary,byte,Java,C++,Arrays,Binary,Byte,在java中将结构{int,int,long}存储为字节数组并在Cpp中将其作为二进制结构读取时,我遇到了一些困难 我几乎什么都试过了。我最大的成功是当我能够正确地读取长值时,但整数是一些随机数 我对endianness感到震惊,我不知道如何才能决定哪种语言使用少量endianness或大量endianness。有谁能告诉我,我如何在java中存储int、long、double等基本类型,并在Cpp中读取它们 谢谢,这会很有帮助的 编辑: 我知道如何用C++阅读它: struct tick {

在java中将结构{int,int,long}存储为字节数组并在Cpp中将其作为二进制结构读取时,我遇到了一些困难

我几乎什么都试过了。我最大的成功是当我能够正确地读取长值时,但整数是一些随机数

我对endianness感到震惊,我不知道如何才能决定哪种语言使用少量endianness或大量endianness。有谁能告诉我,我如何在java中存储int、long、double等基本类型,并在Cpp中读取它们

谢谢,这会很有帮助的

编辑: 我知道如何用C++阅读它:

struct tick {
int x;
int y;
long time;
};

在Java中,我尝试了很多方法,最后一次尝试是:

DataOutput stream = new DataOutputStream(new FileOutputStream(new File("test_file")));
byte[] bytes = ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(1).array();
for (byte b : bytes) {
    stream.write(b); 
}

但是Java代码是开放的

您只编写了第一个整数。。你从来没有写过第二个,然后是长。。 因此,您读取的任何值都是随机的。记住,C++中的代码> sieOf(long)<代码>实际上可能不是8,因为它在爪哇!也不要忘记C++中的结构可以填充,最好每次读取一个值到Stutt的字段。 这很有效

在java方面:

package test;

import java.io.*;
import java.nio.*;


public class Test {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        DataOutput stream = new DataOutputStream(new FileOutputStream(new File("C:/Users/Brandon/Desktop/test_file.dat")));

        int sizeofint = 4;
        int sizeoflong = 4;

        ByteBuffer buffer = ByteBuffer.allocate(sizeofint + sizeofint + sizeoflong).order(ByteOrder.LITTLE_ENDIAN);
        buffer.putInt(5).putInt(6).putInt(7);

        byte[] bytes = buffer.array();

        for (byte b : bytes) {
            stream.write(b); 
        }
    }

}

和C++侧:

#include <fstream>
#include <iostream>

struct tick
{
    int x;
    int y;
    long time;
};

int main()
{
    std::fstream file("C:/Users/Brandon/Desktop/test_file.dat", std::ios::in | std::ios::binary);

    if (file.is_open())
    {
        tick t = {0};

        file.read(reinterpret_cast<char*>(&t), sizeof(t));
        file.close();

        std::cout<<t.x<<" "<<t.y<<" "<<t.time<<"\n";
    }
}

许多负担中只有一种是持久的。结构打包/填充、成员顺序、整数大小。。。你应该展示你的代码,如何在java中填充字节数组,以及如何在C++中读取。好的,我已经添加了我的“代码”。。。不确定,我真的很绝望,所以我降低了对干净代码的要求。我建议您使用十六进制编辑器打开此文件,至少在开始时尝试识别您的值,然后您可以看到它们是如何使用您使用的每个方法存储的。如果您知道这一点,那么您可以设计一个适当的C/C++结构来包含文件中的每个元组啊,对不起,我只复制了一个整数。谢谢你的回复,我现在就试试。
#include <fstream>
#include <iostream>

struct tick
{
    int x;
    int y;
    long time;
};

int main()
{
    std::fstream file("C:/Users/Brandon/Desktop/test_file.dat", std::ios::in | std::ios::binary);

    if (file.is_open())
    {
        tick t = {0};

        file.read(reinterpret_cast<char*>(&t), sizeof(t));
        file.close();

        std::cout<<t.x<<" "<<t.y<<" "<<t.time<<"\n";
    }
}
file.read(reinterpret_cast<char*>(&t.x), sizeof(t.x));
file.read(reinterpret_cast<char*>(&t.y), sizeof(t.y));
file.read(reinterpret_cast<char*>(&t.time), sizeof(t.time));