0
x, y, z, w의 위치를 저장하는 바이너리 파일을 읽으려고했습니다. 즉 1.4567896 5.156986 ..... 등과 같이 모두 부동입니다.Android : 이진 파일 오류 읽기
나는 성공적으로 C++, 또한 자바에서 그것을 읽을 수 있지만 안드로이드에서 할 수없는, 내가 읽어 모두는 여기에 모두 0 ...
내 코드입니다 : PS. 나는
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;
}
}
나는 그들이 올바른 최초로 있는지 확인해야 바이트 읽어 사촌 떠 바이트의 변환을 차단 ... 모두가 실패 전에 많은 코드를보십시오.
솔루션은 괜찮습니다. 마지막 for 루프는 1 분기 만 걸 으면서 문자열 연결은 생산을위한 것이 아닙니다. 'sOutput'에서 "0 0 0 0 0 ...."을 얻는다면 파일 (파일 경로)을 더 잘 검사하십시오. 설명 : 코드 스타일은 javaish가 아닙니다 (헝가리어, 대문자 사용 방법). 수레는 겉으로는 리틀 엔디안 순서로 저장됩니다. 하나는'FloatBuffer.order (LITTLE_ENDIAN)'을 사용할 수있었습니다. 길이 검사가 없습니다. 그러나 괜찮은 코드가 좋습니다. –
고마워, 다시 시도 할게. 파일이 정확하고 "/document/150E-0810:Download/1.pcd"라는 파일 경로가 있습니다. 올바른 것 같습니다 ... 아마도. 어떤 이름 지정 스타일을 사용했는지 모르겠습니다. Time use iData, fData, 때때로 FloatData, IntData 및 Data_x Data_Y ... 등. 어느 것이 더 낫습니다 ~~ ?? – Phong
아마도 for 루프 앞에서 :'sOutput = fileName + ":"'또는; –