Java「ソース」クラスに基づいて「ターゲット ファイル」を生成するアプリケーションがあります。ソースが変更されたときにターゲットを再生成したい。これを行う最善の方法は、クラス コンテンツの byte[] を取得し、byte[] のチェックサムを計算することであると判断しました。
クラスの 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;
}
*.class ファイルと同じ内容の byte[] を取得する方法はありますか? チェックサムの計算は簡単ですが、難しいのは、MD5 または CRC32 チェックサムの計算に使用される byte[] の内容を取得することです。