Frage

Mein Problem ist, dass ich ein Binär-Dateien unterschiedlicher Typen mit einem generischen Parser analysieren will, die in JAVA implementiert. Vielleicht mit einer Konfigurationsdatei das Dateiformat beschrieben werden, die durch die Parser oder das Erstellen von Java-Klassen, die die Dateien analysieren gelesen wird nach einer Art von Parsing-Regeln.

Ich habe ziemlich viel im Internet gesucht, aber gefunden fast nichts zu diesem Thema.

Was ich habe festgestellt, sind nur Dinge, die mit Compiler-Generatoren beschäftigen (Jay, CoJen, etc.), aber ich glaube nicht, dass ich sie etwas für das Parsen von Binär-Dateien zu erzeugen, verwenden kann. Aber ich konnte auf dieser Annahme falsch sein.

Gibt es Rahmenbedingungen, die vor allem befassen sich mit einfacher Analyse von binären Dateien oder kann mir jemand einen Tipp geben, wie ich Parser / Compiler-Generatoren verwenden könnte, dies zu tun?

Aktualisieren : Ich suche nach etwas, wo ich eine config-Datei wie

schreiben
file:
  header: FIXED("MAGIC")
  body: content(10)

content:
  value1: BYTE
  value2: LONG
  value3: STRING(10)

und erzeugt automatisch etwas, das Dateien, die mit „MAGIC“, gefolgt von der zehnfachen Gehalt-Paket.

(die selbst eine lange und eine 10-Byte-String besteht aus einem Byte) beginnen parst

Update2 : Ich fand etwas vergleichbar, was ich suche „ Construct “, aber leider ist dies ein Python-Framework- . Vielleicht hilft das jemand eine Idee zu bekommen, was ich suche.

War es hilfreich?

Lösung

gibt einen Versuch PREON

Andere Tipps

Mit Preon :

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;

  }


}

Die Decodierung Daten:

Codec<File> codec = Codecs.create(File.class);
File file = codecs.decode(codec, buffer);

Lassen Sie mich wissen, wenn Sie Probleme ausgeführt werden.

Ich habe Datainputstream zum Lesen von Binär-Dateien verwendet, und ich schreibe die Regeln in Java. ;) Binär-Dateien können fast jedes Format haben, so gibt es keine allgemeine Regel dafür, wie ist sie zu lesen

.

Frameworks nicht immer die Dinge einfacher. In Ihrem Fall ist die Beschreibungsdatei länger als der Code nur die Daten lesen Sie einen Datainputstream verwenden.

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);
}

Wenn Sie eine Konfigurationsdatei haben Sie eine Java-Konfigurationsdatei verwenden können. http://www.google.co.uk/search?q=java + Konfiguration + Datei

Parser combinator Bibliothek ist eine Option. JParsec funktioniert gut, aber es könnte langsam sein.

Ich habe einen Rahmen für Java entwickelt, die Binärdaten https: // github.com/raydac/java-binary-block-parser in dem Fall sollten Sie nur Struktur Ihrer Binärdatei in pseudolanguage beschreiben

Sie können binäre Dateien mit Parser wie JavaCC . Hier Sie ein einfaches Beispiel zu finden. Wahrscheinlich ist es ein bisschen schwieriger als Textdateien Parsen.

Haben Sie in die Welt von Parsern suchen. Ein guter Parser ist yacc , und es kann ein Port für Java sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top