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 回答