我有一个应用程序,我在其中生成基于 Java“源”类的“目标文件”。我想在源更改时重新生成目标。我已经决定最好的方法是获取类内容的字节 [] 并计算字节 [] 的校验和。
我正在寻找获取类的 byte[] 的最佳方法。这个 byte[] 相当于编译的 .class 文件的内容。使用 ObjectOutputStream不起作用。下面的代码生成一个比类文件的字节内容小得多的 byte[]。
// Incorrect function to calculate the byte[] contents of a Java class
public static final byte[] getClassContents(Class<?> myClass) throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
try( ObjectOutputStream stream = new ObjectOutputStream(buffer) ) {
stream.writeObject(myClass);
}
// This byte array is much smaller than the contents of the *.class file!!!
byte[] contents = buffer.toByteArray();
return contents;
}
有没有办法让 byte[] 与 *.class 文件的内容相同?计算校验和是容易的部分,困难的部分是获取用于计算 MD5 或 CRC32 校验和的 byte[] 内容。