Android 해석 바이트 흐름 데이터 파일

2873 단어 기술 총결산
이어서 지난 글에서 요청한 바이트 흐름 데이터 파일을 해석하기 시작합니다.
byte[] 유형의 파일을 분석하려면 내부 데이터의 데이터 형식이 필요합니다. 다음은 밤을 들겠습니다.
설명: 유형 길이 Uint32는 (4BYTES) Uint8은 (1BYTES)
typedef struct _tag_DATA_INFO{
            Uint32 ID ;//ID------->4바이트
            Uint8 name[32];//이름 ------>32바이트
            Uint32 competence;//사용 권한
            Uint32 Sort;//정렬
            Uint8  reserve[128];//보존 필드
        }TFLOOR_INFO,*PFLOOR_INFO;
1. 이 데이터 형식의 길이를 계산해 낸다. 이를 예로 들면 길이는 4+32+4+4+128=172이다.
즉: 이 바이트 흐름 파일은 172 바이트를 하나의 단원으로 하고 각 단원의 첫 번째 연결이 큰 파일이다
2. 이 데이터 형식을 우리 안드로이드의 bean 클래스로 바꾸기
public class Data{
    private int ID;
    private String name;
    private int competence;
    private int Sort;
    private String  reserve;

    public Floor(int ID, String name, int competence, int sort) {
        this.ID = ID;
        this.name = name;
        this.competence = competence;
        Sort = sort;
    }
    //      get、set   
}

3. 해석 시작
===========다음은 핵심 코드==========
private static List getData(File file) throws UnsupportedEncodingException {
    List list = new ArrayList<>();
    byte[] data = readFileToString(file); //                
    int divLength = 172;
    int count = data.length / divLength; // 172     ,         
    for (int i = 0; i < count; i++) { //        
        int ID = ByteUtil.getInt(data, 0 + (i * divLength)); //data    ,         
        String name = new String(data, 4 + (i * divLength), 32, "UTF-8"); //              
        int competence = ByteUtil.getInt(data, 36 + (i * divLength)); //   =4+32+(i * divLength)
        int Sort = ByteUtil.getInt(data, 40 + (i * divLength)); //   =4+36+(i * divLength)
        Data data = new Data(ID, name, competence, Sort);
        list.add(data);
        //     list      
    }
    return list;
}

==========이상 핵심 코드===========
===========다음은 도구 클래스 방법===========
/**
 *           
 * @param file
 * @return
 */
public static byte[] readFileToString(File file) {
    FileInputStream input = null;
    byte[] buf = new byte[0];
    try {
        input = new FileInputStream(file);
        buf = new byte[input.available()];
        input.read(buf);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return buf;
}
public static int getInt(byte[] bytes,int index) { //     Int     ,       
    return (0xff & bytes[index]) | (0xff00 & (bytes[index+1] << 8)) | (0xff0000 & (bytes[index+2] << 16)) | (0xff000000 & (bytes[index+3] << 24));
}

==========이상 도구류 방법=============

좋은 웹페이지 즐겨찾기