首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有用于二进制文件解析的Java框架?

有没有用于二进制文件解析的Java框架?
EN

Stack Overflow用户
提问于 2009-03-13 21:45:44
回答 8查看 11.2K关注 0票数 17

我的问题是,我想用一个用JAVA实现的通用解析器来解析不同类型的二进制文件。可以使用解析器读取的配置文件来描述文件格式,也可以创建Java类来根据某种解析规则解析文件。

我在互联网上搜索了很多,但几乎找不到关于这个话题的任何东西。

我所发现的只是与编译器生成器(Jay、Cojen等)相关的东西。但是我不认为我可以用它们来生成解析二进制文件的东西。但基于这种假设,我可能是错的。

有没有框架可以特别处理二进制文件的简单解析,或者有人能给我一个提示,我可以使用解析器/编译器生成器来做这件事?

更新:我正在寻找可以写配置文件的东西,比如

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

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

它会自动生成一些东西来解析以“魔术”开头的文件,然后解析十倍于content-package的文件(它本身由一个字节、一个长字符串和一个10字节的字符串组成)。

Update2:我找到了我正在寻找的类似的东西,"Construct",但遗憾的是,这是一个Python框架。也许这能帮助某人找到我想要的东西。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-06-12 09:01:39

试一试preon

票数 11
EN

Stack Overflow用户

发布于 2009-07-10 19:05:07

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

如果你遇到问题,请告诉我。

票数 12
EN

Stack Overflow用户

发布于 2009-03-13 21:53:00

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/644737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档