我正在寻找一个维护良好的Java字节码操作库,它具有直观的API。那里似乎有相当多的人。任何建议在哪些尝试?Java字节码操作库建议
回答
您的问题的最佳答案将受您的具体需求和目标支配;如果你可以扩展你想要完成的任务,我可以提供更加适合的回应。
的代称,但是,根据我的经验,ASM可能提供成熟,灵活性的最佳组合,和易于使用:
- 这是在相对积极的发展:即使最新发布从2009年6月开始,开发人员会定期向其VCS提交提交。
- 它已被广泛用于许多着名的Java产品中,例如AspectJ,Groovy,Cobertura和许多其他产品,这些产品有广泛的用户群,因此有广泛的支持社区。
- 它有相当全面的文档记录,并且从OW2 Consortium和整个社区都有大量的教程,用户指南和参考文档。
N.B. @Yuri下面留下的评论描述了我个人尚未遇到但可能构成重大障碍的情况。在评估各种字节码操作库时,记住他的观察/经验。
这实际上取决于你如何定义直观 ;-)两周前我开始使用ASM来完成当前项目的某个任务,它的工作方式就像一个魅力。它只花了我几个小时来理解它并能够使用它,但我不会直接调用API。但是,如果您对Java字节码有一点了解并熟悉访问者模式,那么学习曲线并不是很高,IMO。
ASM的另一个优势是,它明显与至少在Sun JDK中的标准API捆绑在一起,尽管它们位于不同的包(com.sun.xml.internal.ws.org.objectweb.asm和子包)中。
你是对的:通过一些奇怪的API来判断,人们对直觉的定义似乎差异很大;)。我刚刚花了一点时间看着ASM,而且我的预测远没有预期的那么严重!我想我会坚持下去。感谢您的回答。 – Daniel 2010-03-28 08:14:16
请不要使用实施软件包... – 2010-03-28 11:14:21
是的,没错,不要使用实现包。并且不要操纵字节码,除非你真的必须;-) – 2010-03-29 05:57:02
看看这篇文章: http://www.pabrantes.net/blog/space/start/2008-03-24/1
有点老了,但仍然具有现实意义。
ASM和Javassist是现在使用最多的。 Bcel即将死亡。
- 1. Java字节码操作?
- 2. JAVA字节操作
- 3. Java字节码操作 - 授权问题?
- 4. 字符串操作建议
- 5. Java字节码库
- 6. Java字节数组操作
- 7. Javassist,字节码操作
- 8. 字节码操作模式
- 9. 操作媒体库所需的建议
- 10. 关于1024字节块的文件I/O操作的建议
- 11. x86解码指令操作码字节
- 12. x86操作码编码:sib字节
- 13. ASM:输出java字节码和操作码
- 14. java字节码操作;在每个Java代码之后插入打印代码
- 15. 德尔福字节操作和Java
- 16. 代码更正建议使用Java库的字符串?
- 17. Android中的字节代码操作
- 18. C++将字节转换为操作码?
- 19. 在Java字节码中获取堆栈操作数的arrayref
- 20. Java字节码
- 21. 字节操作c#
- 22. 符号(+/-)在Java字节设置操作字节错误
- 23. 建议Java Swing组件库
- 24. Java OCR库的建议?
- 25. C代码到Java - 字符操作
- 26. Java字节码DUP
- 27. BotFramework:创建没有文字属性的建议操作
- 28. ASM字节码库中用于操作码性质确定的实用方法?
- 29. 字节操作编译
- 30. PHP:unicode和多字节操作
对此问题缺乏具体细节感到抱歉。我不想说出我在做什么的具体细节,但你的回答很有帮助。谢谢。我想我最终会使用ASM。 – Daniel 2010-03-28 08:16:24
看着这个答案我试了ASM,它(4.0)有一个错误或真正奇怪的行为。我正在使用Tree API并遍历方法的指令InsnList。现在,第一次迭代给出了一个结果,第一次迭代后的另一个结果给出了另一个结果 - 一条指令被复制并放在列表的顶部。根本没有修改代码,只有两个迭代一个接一个。切换到Javassist。 – 2012-10-04 12:42:16
@YuriUshakov:这不是我亲身经历的情况。感谢您的提醒! – RTBarnard 2012-10-18 04:56:52