2016-11-23 70 views
-3

我的任务是使用JAVA读取二进制压缩文件。 作为C++和JAVA阅读是有区别的。java/C++中不同的读取二进制文件

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

请帮忙..

这里是示例代码C++和JAVA。 在C++中的Java

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)); 
    } 
} 

 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; 
      } 
     } 
+0

C++不是Java。与Java不同,C++中的sizeof(int)和sizeof(float)'不会成立。 – PaulMcKenzie

回答

2

DataInputStream(以C读出时++没问题)假定输入是网络再见顺序。您的C++代码假定它是以本地字节顺序。如果这些不同,结果也会不同。 DataInputStream也假定intfloat是32比特等。参见Javadoc。