Подтвердить что ты не робот

Существуют ли какие-либо Java Framework для обработки двоичного файла?

Моя проблема в том, что я хочу разбирать двоичные файлы разных типов с помощью общего парсера, который реализован в JAVA. Возможно, описывая формат файла с конфигурационным файлом, который читается парсером или создает классы Java, которые анализируют файлы в соответствии с некоторыми правилами синтаксического анализа.

Я искал довольно много в Интернете, но почти ничего не нашел в этой теме.

То, что я нашел, это просто вещи, которые связаны с генераторами-компиляторами (Jay, Cojen и т.д.), но я не думаю, что могу использовать их для генерации чего-то для разбора двоичных файлов. Но я мог ошибаться в этом предположении.

Существуют ли какие-либо фреймворки, которые особенно подходят для простого анализа двоичных файлов, или кто-нибудь может дать мне подсказку, как я могу использовать генераторы парсера/компилятора для этого?

Обновление: Я ищу что-то, где я могу написать конфигурационный файл, например

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

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

и автоматически генерирует что-то, что анализирует файлы, начинающиеся с "MAGIC", а затем в 10 раз больше содержимого-пакета (который сам состоит из байта, длинной и 10-байтовой строки).

Update2: Я нашел что-то сопоставимое, что я ищу, " Construct", но, к сожалению, это Python-Framework. Возможно, это помогает кому-то понять, что я ищу.

4b9b3361

Ответ 1

попробуйте preon

Ответ 2

Использование 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;

  }


}

Данные декодирования:

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

Сообщите мне, если у вас проблемы.

Ответ 3

Я использовал 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

Ответ 5

Библиотека комбинаторных парсеров является опцией. JParsec работает отлично, однако это может быть медленным.

Ответ 6

Я разрабатываю среду для Java, которая позволяет анализировать двоичные данные https://github.com/raydac/java-binary-block-parser в случае вам следует просто описать структуру вашего двоичного файла в псевдоязыке

Ответ 7

Вы можете анализировать двоичные файлы с помощью парсеров типа JavaCC. Здесь вы можете найти простой пример. Вероятно, это немного сложнее, чем разбор текстовых файлов.

Ответ 8

Вы смотрите в мир парсеров. Хороший парсер yacc, и для него может быть порт для java.