簡體   English   中英

訪問類字節?

[英]Accessing class bytes?

我的目標是訪問表示類的字節碼的byte [],而無需在運行時專門知道類文件的位置。

我已經研究了兩種解決方案,並且能夠從其中一種解決方案取得輕微的成功,但我想知道是否有其他方法可以實現它(或者我在第二種解決方案中出錯了我無法工作)。

我的第一個(溫和)成功的解決方案是使用java.lang.instrumentation ClassFileTransformer類來訪問類的byte []。 雖然這個問題,我認為必須有一個更清潔的方法來實現這一目標。

我的第二個解決方案是使用-Xbootclasspath JVM參數將java.lang.ClassLoader替換為我自己的允許它訪問加載的類的byte []。 我添加了一個簡單的System.out.println調試消息,以確認ClassLoader的覆蓋是否正常,但事實並非如此。 我從這篇論文中得到了關於同一主題的這個想法。 我的課程類似於在鏈接的論文中重新編寫Integer類的方法。 我還使用了類似的JVM參數目錄設置,如下所示:

java -Xbootclasspath/p:.\out\production\boot\java\lang TestLoader

我的想法是使用我鏈接的論文中的方法不能覆蓋ClassLoader類。

我很想知道為什么我重寫ClassLoader的嘗試不起作用,並且還聽到我還能做什么來訪問類的byte []。

你能用getResourceAsStream()讀取類字節嗎?

InputStream is = String.class.getResourceAsStream("String.class");

編輯添加備選:

(從評論中復制)

鑒於需要涵蓋的所有可能性, ClassFileTransformerinstrumentation API可能是最佳選擇。 我不知道'clean'的要求是什么,但是如果問題是必須為JVM指定命令行參數,你可以嘗試使用Attach API - 你可以附加到已經運行的Java進程,推入你的ClassFileTransformer ,查看已加載到JVM中的所有類以及之后加載的所有類。

我能找到的唯一解釋是法語,但代碼仍在java中。 :)

http://www.google.ca/url?sa=t&source=web&cd=2&ved=0CCEQFjAB&url=http%3A%2F%2Fdeptinfo.unice.fr%2F~renevier%2Farchilog%2Fcours02-chargementDynamique-4p.pdf&rct=j&q= JVM%20define%20class%20loader&EI = Bv05ToKZFcaksQLSs-TDAG&USG = AFQjCNHnjhZbR-A1KWRppvyBP3n_XbrdMA

第1-8頁解釋了如何構建類加載器並提供從類文件中獲取字節的好主意。

此致,stéphane

我認為你剛剛啟動了類路徑錯誤。 假設類加載器類文件是:

.\out\production\boot\java\lang\ClassLoader.class

你應該使用:

java -Xbootclasspath/p:.\out\production\boot TestLoader

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM