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.
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. –
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
Vielleicht vor der for-Schleife: 'sOutput = fileName +": "' oder so; –