Question

Mon problème est que je souhaite analyser des fichiers binaires de types différents avec un analyseur générique implémenté dans JAVA. Peut-être décrire le format de fichier avec un fichier de configuration lu par l’analyseur ou créer des classes Java qui analysent les fichiers selon une sorte de règle d’analyse.

J'ai beaucoup cherché sur Internet, mais je n'ai presque rien trouvé à ce sujet.

Ce que j'ai trouvé ne concerne que des choses concernant les générateurs de compilateur (Jay, Cojen, etc.), mais je ne pense pas que je puisse les utiliser pour générer quelque chose permettant d'analyser des fichiers binaires. Mais je peux me tromper avec cette hypothèse.

Existe-t-il des frameworks qui traitent en particulier avec une analyse facile des fichiers binaires ou quelqu'un peut-il me dire comment utiliser un générateur de parseurs / compilateurs pour le faire?

Mettre à jour : Je cherche quelque chose où je peux écrire un fichier de configuration comme

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

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

et il génère automatiquement quelque chose qui analyse les fichiers qui commencent par "MAGIC", suivi par dix fois le paquet de contenu (qui se compose d'un octet, d'une chaîne longue et d'une chaîne de 10 octets).

Update2 : J'ai trouvé quelque chose de comparable à ce que je cherche, & Construct " ;, mais malheureusement, il s'agit d'un Python -Cadre. Peut-être que cela aide quelqu'un à se faire une idée de ce que je cherche.

Était-ce utile?

La solution

Essayez de preon

Autres conseils

Utilisation de 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;

  }


}

Données de décodage:

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

Faites-moi savoir si vous rencontrez des problèmes.

J'ai utilisé DataInputStream pour lire des fichiers binaires et j'écris les règles en Java. ;) Les fichiers binaires peuvent avoir à peu près n'importe quel format, il n'y a donc pas de règle générale sur la façon de les lire.

Les frameworks ne simplifient pas toujours les choses. Dans votre cas, le fichier de description est plus long que le code pour simplement lire les données à l'aide d'un 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);
}

Si vous souhaitez avoir un fichier de configuration, vous pouvez utiliser un fichier de configuration Java. http://www.google.co.uk/search?q=java + configuration + fichier

La bibliothèque de combinateur d’analyseur est une option. JParsec fonctionne correctement, même si cela pourrait être lent.

Je développe un framework pour Java qui permet d'analyser des données binaires https: // github.com/raydac/java-binary-block-parser dans le cas où vous devriez juste décrire la structure de votre fichier binaire en pseudolangue

Vous pouvez analyser les fichiers binaires avec des analyseurs tels que JavaCC . Vous trouverez ici un exemple simple. C’est probablement un peu plus difficile que d’analyser des fichiers texte.

Avez-vous examiné le monde des analyseurs syntaxiques. Un bon analyseur est yacc , et il peut y en avoir un portage pour java.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top