在java / c ++中读取不同的二进制文件

时间:2016-11-23 02:06:34

标签: java c++ ifstream datainputstream

我的任务是使用JAVA读取二进制压缩文件。 阅读C ++和JAVA之间存在差异。

当我用JAVA阅读时,我不知道问题是什么。 请让我知道我写的JAVA代码的问题。

请帮忙..

这里是示例代码C ++和JAVA。 (使用C ++阅读时没问题)

#C ++

ifstream file(path, ios_base::in | ios_base::binary);

while (!file.eof())
{
    file.read((char *)&j, sizeof(int));
    if (file.eof()) break;
    file.read((char *)&k, sizeof(int));
    file.read((char *)&result_c[j][k], sizeof(float));
    file.read((char *)&result_g[j][k], sizeof(float));

    for (int l = 0; l < 6; l++)
    {
        file.read((char *)&result_i[j][k][l], sizeof(float));
        file.read((char *)&result_t[j][k][l], sizeof(float));
    }
}

#in Java

        fin = new FileInputStream(new File(_path));
        bin = new BufferedInputStream(fin);
        din = new DataInputStream(bin);

        boolean _eof = false;
        while (!_eof) {

            int _ny = 0, _nx = 0;
            float _cResult = 0.0f, _gResult = 0.0f;
            float[] _iResult = new float[6];
            float[] _tResult = new float[6];

            try {

                _ny = din.readInt(); // ny
                _nx = din.readInt(); // nx
                _cResult = din.readFloat();
                _gResult = din.readFloat();

                for (int i = 0; i < 6; i++) {
                    _iResult[i] = din.readFloat();
                    _tResult[i] = din.readFloat();
                }

            } catch (EOFException eofe) {
                _eof = true;
            }
        }

1 个答案:

答案 0 :(得分:2)

DataInputStream假设输入处于网络再见顺序。您的C ++代码假定它是本机字节顺序。如果这些不同,结果也会不同。 DataInputStream还假设intfloat为32位,等等。请参阅Javadoc。