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));
}
==========이상 도구류 방법=============