2016-11-23 23 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。