문제

내 문제는 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경우, 이진 파일의 구조를 의사로 언어로 설명해야합니다.

구문 분석기와 같은 이진 파일을 구문 분석 할 수 있습니다 Javacc. 여기 간단한 예를 찾을 수 있습니다. 아마도 텍스트 파일을 구문 분석하는 것보다 조금 더 어려울 것입니다.

파서의 세계를 살펴 보셨습니까? 좋은 파서입니다 YACC, 그리고 Java를위한 항구가있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top