이진 파일 구문 분석을위한 Java 프레임 워크가 있습니까?
-
22-07-2019 - |
문제
내 문제는 Java에서 구현 된 일반 파서로 다른 유형의 이진 파일을 구문 분석하고 싶다는 것입니다. 파서가 읽은 구성 파일로 파일 형식을 설명하거나 일종의 구문 분석 규칙에 따라 파일을 구문 분석하는 Java 클래스를 작성할 수 있습니다.
나는 인터넷에서 꽤 검색했지만이 주제에서는 거의 아무것도 발견하지 못했습니다.
내가 찾은 것은 컴파일러 발전기 (Jay, Cojen 등)를 다루는 것일 뿐이지 만 이진 파일을 구문 분석하는 데 무언가를 생성하는 데 사용할 수 있다고 생각하지 않습니다. 그러나 나는 그 가정에 틀릴 수 있습니다.
이진 파일을 쉽게 구문 분석하는 프레임 워크가 있습니까? 아니면 파서/컴파일러 생성기를 사용하여 어떻게 그렇게 할 수 있는지 힌트를 줄 수 있습니까?
업데이트: 나는 config-file을 쓸 수있는 무언가를 찾고 있습니다.
file:
header: FIXED("MAGIC")
body: content(10)
content:
value1: BYTE
value2: LONG
value3: STRING(10)
또한 "Magic"으로 시작하는 파일을 구문 분석 한 다음 컨텐츠 패키지의 10 배 (바이트, 길이 및 10 바이트 문자열로 구성됨)를 자동으로 생성합니다.
업데이트 2: 나는 내가 찾고있는 것을 비슷한 것을 발견했다. "건설하다"그러나 슬프게도 이것은 파이썬 프레임 워크입니다. 아마도 누군가가 아이디어를 얻는 데 도움이 될 것입니다.
해결책
시도해보십시오 사전
다른 팁
사용 사전:
public class File {
@BoundString(match="MAGIC")
private String header;
@BoundList(size="10", type=Body.class)
private List<Body> body;
private static class Body {
@Bound
byte value1;
@Bound
long value2;
@BoundString(size="10")
String value3;
}
}
데이터 디코딩 :
Codec<File> codec = Codecs.create(File.class);
File file = codecs.decode(codec, buffer);
문제가 발생하면 알려주세요.
이진 파일을 읽는 데 DatainputStream을 사용했으며 Java로 규칙을 작성합니다. ;) 이진 파일은 거의 모든 형식을 가질 수 있으므로 읽는 방법에 대한 일반적인 규칙이 없습니다.
프레임 워크가 항상 일을 더 단순하게 만드는 것은 아닙니다. 귀하의 경우 설명 파일은 DatainputStream을 사용하여 데이터를 읽는 코드보다 길다.
public static void parse(DataInput in) throws IOException {
// file:
// header: FIXED("MAGIC")
String header = readAsString(in, 5);
assert header.equals("MAGIC");
// body: content(10)
// ?? not sure what this means
// content:
for(int i=0;i<10;i++) {
// value1: BYTE
byte value1 = in.readByte();
// value2: LONG
long value2 = in.readLong();
// value3: STRING(10)
String value3 = readAsString(in, 10);
}
}
public static String readAsString(DataInput in, int len) throws IOException {
byte[] bytes = new byte[len];
in.readFully(bytes);
return new String(bytes);
}
구성 파일을 사용하려면 Java 구성 파일을 사용할 수 있습니다. http://www.google.co.uk/search?q=java+configuration+file
구글 프로토콜 버퍼
Parser Combinator 라이브러리가 옵션입니다. JPARSEC 잘 작동하지만 느릴 수 있습니다.
나는 이진 데이터를 구문 분석 할 수있는 Java의 프레임 워크를 개발하고 있습니다. https://github.com/raydac/java-binary-binary-parser경우, 이진 파일의 구조를 의사로 언어로 설명해야합니다.
파서의 세계를 살펴 보셨습니까? 좋은 파서입니다 YACC, 그리고 Java를위한 항구가있을 수 있습니다.