2016-07-12 4 views
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; 
    } 
} 

나는 그들이 올바른 최초로 있는지 확인해야 바이트 읽어 사촌 떠 바이트의 변환을 차단 ... 모두가 실패 전에 많은 코드를보십시오.

+0

솔루션은 괜찮습니다. 마지막 for 루프는 1 분기 만 걸 으면서 문자열 연결은 생산을위한 것이 아닙니다. 'sOutput'에서 "0 0 0 0 0 ...."을 얻는다면 파일 (파일 경로)을 더 잘 검사하십시오. 설명 : 코드 스타일은 javaish가 아닙니다 (헝가리어, 대문자 사용 방법). 수레는 겉으로는 리틀 엔디안 순서로 저장됩니다. 하나는'FloatBuffer.order (LITTLE_ENDIAN)'을 사용할 수있었습니다. 길이 검사가 없습니다. 그러나 괜찮은 코드가 좋습니다. –

+0

고마워, 다시 시도 할게. 파일이 정확하고 "/document/150E-0810:Download/1.pcd"라는 파일 경로가 있습니다. 올바른 것 같습니다 ... 아마도. 어떤 이름 지정 스타일을 사용했는지 모르겠습니다. Time use iData, fData, 때때로 FloatData, IntData 및 Data_x Data_Y ... 등. 어느 것이 더 낫습니다 ~~ ?? – Phong

+0

아마도 for 루프 앞에서 :'sOutput = fileName + ":"'또는; –

답변

0

Android에서는 변수를 지속적으로 확인하기 위해 실행 가능한 인터페이스를 사용해야합니다.