我正在努力理解ASM,目前还停留在手册的2.2.4章,不过这应该是一个简单的Java问题。
在我试图理解的示例代码中,有一行代码叫做byte[] b1 = ...;
,由于这不是一个完整的语句(我甚至试过了!),我将其替换为byte[] b1 = new byte[1024];
。
但是当我编译时,我得到了这个奇怪的错误消息:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
在三行之后调用(classReader.accept(classWriter, 0);
)。下面是完整的代码和完整的错误消息:
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
public class ModifyClassExample {
public static void main(String[] args) {
byte[] b1 = new byte[1024];
ClassWriter classWriter = new ClassWriter(0);
ClassReader classReader = new ClassReader(b1);
classReader.accept(classWriter, 0);
byte[] b2 = classWriter.toByteArray();
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at org.objectweb.asm.ClassReader.readStringish(ClassReader.java:3726)
at org.objectweb.asm.ClassReader.readClass(ClassReader.java:3741)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:454)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:424)
at ModifyClassExample.main(ModifyClassExample.java:9)
Process finished with exit code 1
我试着减少字节数组的大小。这就是为什么我知道这个错误弹出在数组长度为14+。
不用说,我需要的不止这些。
1条答案
按热度按时间xpszyzbs1#
您没有在字节数组
b1
中提供任何类数据,因此它不会工作。我建议创建一个具有各种构造的测试类,并将其用作测试主题。
或者使用2.2.3中的示例生成数据-最后一行生成字节数组。