2016-11-23 8 views
-3

私の仕事は、JAVAを使ってバイナリ圧縮ファイルを読み込むことです。 C++とJAVAとの読み方に違いがあります。java/C++の読み込みバイナリファイルが異なります

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

 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ではありません。 C++の 'sizeof(int)'と 'sizeof(float)'は、Javaと異なり、石で設定されていません。 – PaulMcKenzie

答えて

2

DataInputStream入力がネットワークBYE順であると仮定します。あなたのC++コードはそれがネイティブバイトオーダーであるとみなします。これらが異なる場合、結果も異なるでしょう。 DataInputStreamもまた、intfloatが32ビットであると仮定します.Javadocを参照してください。

関連する問題