我正在尋找一個維護良好的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