我想知道如何将字节数组加载到 内存 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;
}
}
如何从JNI中JAR文件的字节数组加载所有类<我的代码 我需要读取JAR文件的字节,将它们转换成jbytes并从这些字节加载所有java类 比如java中的代码
如果我有一个内部类声明,例如: 其次是: A$B内部类也会加载吗?如果B内部类没有被声明为“静态”呢?
如EhCache留档所述: 实际上,这意味着持久性内存中缓存将启动,其所有元素都将在磁盘上。[...]因此,Ehcache设计不会在启动时将它们全部加载到内存中,而是根据需要懒惰地加载它们。 我希望内存缓存启动时将所有元素都存储在内存中,我该如何实现? 这是因为我们的网站对缓存执行了大量的访问,所以我们第一次访问网站时,它的响应时间非常长。
框架中所有的类都是通过类加载器(ClassLoader)加载的,通过Loader我们可以实现类的统一管理。下面我们一起来看看Loader提供了哪些加载方法: 1. Loader::import 加载一个类或者加载一个包 方法原型 import( $classPath, $type = IMPORT_APP, $extension=EXT_PHP ) 参数名称 参数说明 $classPath 文件的
加载器,顾名思义,是用于加载元素的,加载的元素可以是库(类),视图文件 , 驱动器 ,辅助函数 , 模型 或其他你自己的文件。 注解 该类由系统自动加载,你无需手工加载。 应用程序"包" 包的视图文件 类参考 应用程序"包" 应用程序包(Package)可以很便捷的将你的应用部署在一个独立的目录中, 以实现自己整套的类库,模型,辅助函数,配置,文件和语言包。 建议将这些应用程序包放置在 appli
问题内容: 我需要将一个MySQL数据库中的1亿多行记录加载到内存中。我的Java程序失败, 因为我的机器中有8GB RAM,并且我的JVM选项中给出了-Xmx6144m。 这是我的代码 任何想法如何克服这个问题? 更新 我碰到了这篇文章 ,以及根据下面的评论更新了我的代码。看来我能够以相同的- Xmx6144m量将数据加载到内存中,但是需要很长时间。 这是我的代码。 要加载前100,000行,需