将字节数组加载到内存类加载器中

我想知道如何将字节数组加载到 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?

谢谢!

回答:

我将在这里发布我过去做过的实现:

// main

String 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

回到顶部