15

我正在做一个项目,我们在 Java 服务和用其他各种语言编写的客户端之间进行大量远程对象传输。鉴于我们当前的限制,我决定看看如何根据现有的 Java 类生成代码。基本上,我需要获取一个.class文件(或它们的集合)来解析字节码以确定所有数据成员,也许还有 getter/setter,然后编写一些可以用不同语言输出代码的东西来创建一个具有相同结构的类。

我不是在寻找诸如 JAD 之类的标准反编译器。我需要能够获取一个.class文件并为其数据成员和方法创建一个对象模型。这可能吗?

4

6 回答 6

12

我用过BCEL,发现它真的很尴尬。ASM要好得多。它非常广泛地使用访问者(这可能有点令人困惑)并且不创建对象模型。不创建对象模型被证明是一个好处,因为您想要创建的任何模型都不太可能看起来像对所有数据的字面解释。

于 2008-10-02T20:53:00.917 回答
1

我过去使用过 BCEL,它非常易于使用。那是几年前的事了,所以现在可能会有更好的东西。

阿帕奇雅加达BCEL

于 2008-10-02T20:22:40.943 回答
1

根据您的描述,听起来简单的反射就足够了。您可以发现类的所有静态结构,以及访问特定实例的字段。

如果您尝试翻译方法说明,我只会继续使用 BCEL。(如果这就是你想要实现的自动化,祝你好运!)

于 2008-10-03T00:10:52.143 回答
1

JAD是一个不允许编程访问的 java 反编译器。它不再可用,并且可能不适用于具有 Java7 字节码的较新项目。

于 2008-10-03T03:26:58.147 回答
1

我很震惊,还没有人提到ASM。这是您的钱可以买到的最好的字节码库。好吧,好吧,它是免费的。

于 2008-10-03T04:17:53.327 回答
0

我认为 javassist 也可以帮助你。

http://www.jboss.org/javassist/

我从来没有需要使用它,但如果你试一试,你会告诉我们你对它的意见吗?

虽然我认为它更多的是用于字节码操作而不是 .class 检查。

于 2008-10-02T20:35:37.947 回答