2016-07-12 9 views
0

x、y、z、wの位置を保存しているバイナリファイルを読み込もうとしました。 つまり、1.4567896 5.156986 .....などのようにすべて浮動です。Android:バイナリファイルのエラーを読み取る

私が正常にC++とJavaでもそれを読んで、しかし、アンドロイドで行うことができませんでした、 私が読んですべてがここですべてゼロ...

である私のコードです: PS。私は、彼らが最初に正しいかどうかを確認する必要がバイトを読み込むcuzの浮かぶようにバイトの変換を遮断し

public class DataIO { 

    private int    DataSize = 640*320*4; 
    private float[]   fDataBuffer; 
    private byte[]   bDataBuffer; 

    private String   sOutput; 

    public DataIO(){ 
     bDataBuffer = new byte[DataSize*4]; 
     fDataBuffer = new float[DataSize]; 
    } 

    /*============================================= 
    * Function: 
    *  ReadFile 
    * Description: 
    *  Read binary float data to float[] buffer. 
    *================================================ */ 
    public void ReadFile(String FileName){ 
     File file = new File(FileName); 
     try { 
      FileInputStream finStream = new FileInputStream(file); 

      if(finStream.read(bDataBuffer) == -1){ 
       Log.d("ReadData", "Reading Data has problem."); 
      } 

      finStream.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     int index = 0; 
     for(int i = 0; i < DataSize; i+=1){ 
      /*int asInt = (bDataBuffer[i+0] & 0xFF) 
        | ((bDataBuffer[i+1] & 0xFF) << 8) 
        | ((bDataBuffer[i+2] & 0xFF) << 16) 
        | ((bDataBuffer[i+3] & 0xFF) << 24); 
      fDataBuffer[index] = Float.intBitsToFloat(asInt);*/ 

      sOutput += String.format("%d ", bDataBuffer[i]); 
      index++; 
     } 

    } 

    /*============================================= 
    * Function: 
    *  GetData 
    * Description: 
    *  output the data by string. 
    *================================================ */ 
    public String GetData(){ 
     return sOutput; 
    } 
} 

...すべてが失敗し、前に多くのコードを試してみてください。

+0

解決策は大丈夫ですが、最後のforループはちょうど第1四半期を歩いていますが、実行された文字列の連結は生産のためのものではありません。 'sOutput'で" 0 0 0 0 0 .... "を取得している場合は、ファイル(ファイルパス)をよく調べてください。備考:コードスタイルはjavaishではありません(ハンガリー語、大文字のメソッドです)。フロートは一見リトルエンディアンの順序で格納されています。 1つは 'FloatBuffer.order(LITTLE_ENDIAN)'を使用している可能性があります。長さチェックはありません。しかし、細かいコードは問題ありません。 –

+0

ありがとう、もう一度やり直します。 ファイルは正しいですし、私はファイルパス "/document/150E-0810:Download/1.pcd"を得ました。私はそれも正しいと思います...多分。 どのような名前付けスタイルを使用しているのか分かりません。時間はiData、fData、時々FloatData、IntData、Data_x Data_Y ...などを使用します。 どちらが良いです~~ ?? – Phong

+0

おそらくforループの前にあります: 'sOutput = fileName +": "' or such; –

答えて

0

Androidでは、常に変数をチェックするために実行可能なインターフェイスを使用する必要があります。

関連する問題