簡體   English   中英

是否存在用於二進制文件解析的Java框架?

[英]Are there any Java Frameworks for binary file parsing?

我的問題是,我想用一個在JAVA中實現的通用解析器來解析不同類型的二進制文件。 也許用一個配置文件來描述文件格式,該配置文件由解析器讀取或創建根據某種解析規則解析文件的Java類。

我在互聯網上搜索了很多,但在這個主題上幾乎找不到任何東西。

我發現的只是處理編譯器生成器(Jay,Cojen等)的事情,但我認為我不能用它們來生成解析二進制文件的東西。 但我在這個假設上可能是錯的。

是否有任何框架特別容易解析二進制文件或任何人可以給我一個提示如何使用解析器/編譯器生成器這樣做?

更新 :我正在尋找可以編寫配置文件的東西

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

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

它會自動生成一些東西來解析以“MAGIC”開頭的文件,然后是內容包的十倍(它本身由一個字節,一個長字節和一個10字節的字符串組成)。

Update2 :我發現了一些類似我正在尋找的東西,“ 構造 ”,但遺憾的是這是一個Python框架。 也許這有助於某人獲得一個想法,我正在尋找什么。

使用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);

如果您遇到問題,請告訴我。

試試preon

我使用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

谷歌的協議緩沖區

我一直在開發一個Java框架,它允許解析二進制數據https://github.com/raydac/java-binary-block-parser ,你應該用偽語言來描述二進制文件的結構

Parser combinator庫是一個選項。 JParsec工作正常,但可能很慢。

您可以使用JavaCC等解析器解析二進制文件。 在這里你可以找到一個簡單的例子。 可能比解析文本文件困難一些。

你有沒有調查解析器的世界。 一個好的解析器是yacc ,並且它可能有一個java的端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM