以编程方式检查.class文件
我正在开发一个项目,我们在Java服务和用其他各种语言编写的客户端之间进行大量的远程对象传输。 鉴于我们目前的限制,我决定看看基于现有Java类生成代码需要什么。 基本上我需要一个.class
文件(或它们的集合)解析字节码以确定所有数据成员和可能是getter / setter然后编写一些可以用不同语言输出代码的东西来创建一个具有相同语言的类结构体。
我不是在寻找像JAD这样的标准反编译器。 我需要能够获取.class
文件并创建其数据成员和方法的对象模型。 这有可能吗?
我使用过BCEL,发现它真的很尴尬。 ASM要好得多。 它非常广泛地使用访问者(这可能有点令人困惑)并且不会创建对象模型。 不创建对象模型是一个奖励,因为您想要创建的任何模型都不太可能看起来像是对所有数据的字面解释。
我过去使用过BCEL,它很容易使用。 这是几年前所以现在可能会有更好的东西。
Apache Jakarta BCEL
根据您的描述,听起来简单的reflection就足够了。 您可以发现类的所有静态结构,以及访问特定实例的字段。
如果你试图翻译方法指令,我只会转到BCEL。 (如果这是你想要自动化的东西,祝你好运!)
我很震惊,还没有人提到过ASM 。 这是你的钱可以买到的最好的字节码库。 好吧,好吧,它是免费的。
JAD是一个java反编译程序,不允许编程访问。 它不再容易获得,并且可能不适用于具有Java7字节码的较新项目。
我认为javassist也可以帮到你。
http://www.jboss.org/javassist/
我从来没有需要使用它,但如果你尝试一下,你会告诉我们你对它的评论吗?
虽然我认为字节码操作比.class检查更多。