2016-07-12 13 views
0

Ich habe versucht, eine Binärdatei zu lesen, die die Position von x, y, z, w. das heißt, sie sind alle float wie 1.4567896 5.156986 ..... etc.Android: Lesen Binärdatei Fehler

ich es erfolgreich in C++ lesen und auch Java, konnte aber nicht in Android getan, alles, was ich in gelesen ist alles null ...

Hier ist mein Code: ps. Ich versuche, vor vielen Codes, die alle gescheitert ...

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

ich die Umwandlung von Byte blockiert Cuz in Byte lesen zu schweben sein müssen überprüfen, ob sie korrekt erste sind.

+0

Die Lösung ist in Ordnung, obwohl die letzte für Schleife nur das erste Quartal geht, und String-Verkettung wie dort getan ist nichts für die Produktion. Wenn Sie "0 0 0 0 0 ...." in "sOutput" erhalten, überprüfen Sie die Datei (Dateipfad). Bemerkungen: Der Code-Stil ist nicht javaish (ist ungarisch, großgeschriebene Methoden). Floats werden scheinbar in Little-Endian-Reihenfolge gespeichert. Man hätte einen 'FloatBuffer.order (LITTLE_ENDIAN)' verwenden können. Keine Längenprüfung Aber feiner Code ist in Ordnung. –

+0

Danke, ich werde es noch einmal versuchen. Die Datei ist korrekt und ich habe den Dateipfad "/document/150E-0810:Download/1.pcd" Ich denke, es ist auch korrekt ... vielleicht. Ich bin mir nicht sicher, welchen Benennungsstil ich verwendet habe. Ich benutze iData, fData, manchmal FloatData, IntData und auch Data_x Data_Y ... etc. Welcher ist besser ~~ ?? – Phong

+0

Vielleicht vor der for-Schleife: 'sOutput = fileName +": "' oder so; –

Antwort

0

Auf Android müssen Sie eine runnable Schnittstelle verwenden, um eine Variable ständig zu überprüfen.