2

コードで bin フォルダーの .class ファイルを使用したい - バイトに変換しますが、その方法がわかりません。bin/example.class があり、それをロードして、クラスのバイト数を確認する必要があります。

私は次のようなものを見つけました:

public class MyClassLoader extends ClassLoader{ 

      public MyClassLoader(){ 
            super(MyClassLoader.class.getClassLoader()); 
      } 
}

しかし、それは役に立たないようです。これを行うための非常に簡単な方法に違いありません。それは本当に簡単に見えますが、インターネット全体が何千行ものclassLoaderコードを書くように私を駆り立てようとしています。

編集:私のJavaファイルはプログラムでコンパイルされ、.classファイルはプログラムで作成されるため、その名前を参照するだけでなく、ワークスペースの別の場所にもあります。

いくつかのヒント?

4

2 に答える 2

3

bin フォルダーをクラスパスに追加するだけです。

バイト数を取得するには、リソース URL を取得し、File オブジェクトに変換してサイズをクエリします。

例:

package test;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;

public class Example {

    public static final String NAME = Example.class.getSimpleName() + ".class";

    public static void main(String[] args) throws URISyntaxException {
        URL url = Example.class.getResource(NAME);
        long size = new File(url.toURI().getPath()).length();
        System.out.printf("The size of file '%s' is %d bytes\n", NAME, size);
    }

}

出力します:

ファイル「Example.class」のサイズは 1461 バイトです

于 2012-11-28T13:05:06.957 に答える
1

次のようなことができます。

public class MyClassLoader extends ClassLoader { 

    protected synchronized Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException {

        try {
            return super.loadClass(name, resolve);
        }
        catch (ClassNotFoundException e) {

            // TODO: test, if you can load the class with 
            // the given name. if not, rethrow the exception!

            byte[] b = loadClassData(name);
            return defineClass(name, b, 0, b.length);
        }

    }

    private byte[] loadClassData(String name) {
        // TODO: read contents of your file to byte array
    }


}
于 2012-11-28T13:07:37.207 に答える