📄 jarclassloader.java
字号:
package a.a.a.b;
import java.util.jar.*;
import java.util.zip.*;
import java.io.*;
public class JarClassLoader extends ClassLoader {
JarFile jarFile;
public JarClassLoader(String jarFileName) throws IOException {
super();
jarFile=new JarFile(new File(jarFileName));
}
public JarClassLoader(JarFile _jarFile){
jarFile=_jarFile;
}
protected Class findClass(String name)throws ClassNotFoundException {
Class theClass=null;
theClass=this.findLoadedClass(name);
if(theClass==null){
try{
theClass=this.getParent().loadClass(name);
}catch(ClassNotFoundException e){
byte[] bytes = loadClassBytes(name);
if(bytes!=null){
theClass = defineClass(name, bytes, 0, bytes.length);
}
if (theClass == null){
throw new ClassFormatError();
}
}
}
return theClass;
}
public InputStream getResourceAsStream(String name){
InputStream is=null;
if(is==null){
String resName=name;
if(resName.startsWith("/")){
resName=resName.substring(1);
}
try{
ZipEntry entry=jarFile.getEntry(resName);
is=jarFile.getInputStream(entry);
}catch(Exception exp){
return super.getResourceAsStream(name);
}
}
return is;//new FullReadInputStream(is);
}
private byte[] loadClassBytes(String className) throws
ClassNotFoundException {
byte[] classBytes=null;
try {
String clsName=className.replace('.','/')+".class";
if(clsName.startsWith("/")){
clsName=clsName.substring(1);
}
JarEntry entry=jarFile.getJarEntry(clsName);
InputStream is=jarFile.getInputStream(entry);
int len=is.available();
classBytes=new byte[len];
int readed=0;
while(readed<len){
readed+=is.read(classBytes,readed,len-readed);
}
is.close();
} catch (Exception fnfe) {
throw new ClassNotFoundException(className);
}
return classBytes;
}
public void closeLoader(){
synchronized(jarFile){
try{
jarFile.close();
jarFile=null;
}catch(IOException e){
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -