以编程方式检查.class文件
时间:2020-03-06 15:02:54 来源:igfitidea点击:
我正在做一个项目,我们在Java服务和以其他各种语言编写的客户端之间进行大量的远程对象传输。考虑到我们当前的限制,我决定查看基于现有Java类生成代码所需要的内容。基本上,我需要获取一个.class文件(或者它们的集合)来解析字节码,以确定所有数据成员以及getter / setter方法,然后编写一些可以输出不同语言代码的内容,从而创建一个相同的结构。
我不是在寻找像JAD这样的标准反编译器。我需要能够获取.class
文件并创建其数据成员和方法的对象模型。这有可能吗?
解决方案
我过去曾经使用过BCEL,它非常易于使用。那是几年前的事,所以现在可能会有更好的情况。
阿帕奇雅加达BCEL
我认为javassist也可以为我们提供帮助。
http://www.jboss.org/javassist/
我从来不需要使用它,但是如果我们尝试一下,我们可以让我们知道我们对它的评论吗?
尽管我认为字节码操作比.class检查更多。
我使用了BCEL,发现它确实很尴尬。 ASM更好。它非常广泛地使用访问者(这可能会造成一些混乱),并且不会创建对象模型。事实证明,不创建对象模型是一种好处,因为我们想要创建的任何模型都不太可能看起来像对所有数据的字面解释。
根据描述,听起来像简单的反射就足够了。我们可以发现该类的所有静态结构,以及访问特定实例的字段。
仅当我们尝试翻译方法说明时,我才会继续介绍BCEL。 (如果那是我们要实现自动化的方法,那么祝我们好运!)
JAD是不允许程序访问的Java反编译器。它不再是可用的,并且可能不适用于具有Java7字节码的较新项目。
令我震惊的是,还没有人提到ASM。这是我们可以买到的最好的字节码库。好吧,它是免费的。