将字节数组加载到内存类加载器中
我想知道如何将字节数组加载到 URLClassLoader中?字节数组是jar文件的解密字节(如下所示)!
大多数内存类加载器都使用ClassLoader而不是URLClassLoader!我需要它使用URLClassLoader。
byte[] fileB = Util.crypt.getFileBytes(inputFile); byte[] dec;
dec = Util.crypt.decrypt(fileB, "16LENGTHLONGKEYX".getBytes());
//Load bytes into memory and load a class here?
谢谢!
回答:
我将在这里发布我过去做过的实现:
// mainString className = "tests.compiler.DynamicCompilationHelloWorldEtc";
//...
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
File classesDir = new File(tempDir);
CustomClassLoader ccl = new CustomClassLoader(classLoader, classesDir);
if (ccl != null) {
Class clazz = ccl.loadClass(className);
///...
}
我的自定义ClassLoader:
package tests.classloader;import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
public class CustomClassLoader extends ClassLoader {
private File classesDir;
public CustomClassLoader(ClassLoader parent, File classesDir) {
super(parent);
this.classesDir = classesDir;
}
public Class findClass(String name) {
byte[] data = loadDataFromAny(name);
return defineClass(name, data, 0, data.length);
}
private byte[] loadDataFromAny(String name) {
name = name.replace('.', '/');
name = name + ".class";
byte[] ret = null;
try {
File f = new File(classesDir.getAbsolutePath(), name);
FileInputStream fis = new FileInputStream(f);
ByteBuffer bb = ByteBuffer.allocate(4*1024);
byte[] buf = new byte[1024];
int readedBytes = -1;
while ((readedBytes = fis.read(buf)) != -1) {
bb.put(buf, 0, readedBytes);
}
ret = bb.array();
}
catch (Exception e) {
e.printStackTrace();
}
return ret;
}
}
以上是 将字节数组加载到内存类加载器中 的全部内容, 来源链接: utcz.com/qa/403428.html