Package Torello.Java.Additional
Class ByteArrClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
-
- Torello.Java.Additional.ByteArrClassLoader
-
public class ByteArrClassLoader extends java.lang.ClassLoader
This utilizes the classConstantPool
to facilitate loading a Java-Class from any directory. There is no requirement that the'.class'
file be properly placed in a sub-directory that has a name which mirrors the full Package-Name of the class which is to be loaded.
Hi-Lited Source-Code:- View Here: Torello/Java/Additional/ByteArrClassLoader.java
- Open New Browser-Tab: Torello/Java/Additional/ByteArrClassLoader.java
File Size: 4,284 Bytes Line Count: 117 '\n' Characters Found
-
-
Constructor Summary
Constructors Constructor ByteArrClassLoader()
ByteArrClassLoader(ClassLoader parentClassLoader)
-
Method Summary
Parent Class Method: Implements java.lang.ClassLoader's 'defineClass' Method Modifier and Type Method Class<?>
defineClass(String name, byte[] classBytes)
Load any Java Class directly from a byte[]-Array (or a File-Name) Modifier and Type Method Class<?>
readJavaClass(byte[] bArr)
Class<?>
readJavaClass(String classFileName)
Class<?>
readJavaClassNOIOE(String classFileName)
Static-Method Extract the Class-Name from a '.class' File Modifier and Type Method static String
extractClassName(byte[] bArr)
-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findClass, findLibrary, findLoadedClass, findResource, findResource, findResources, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Constructor Detail
-
ByteArrClassLoader
public ByteArrClassLoader(java.lang.ClassLoader parentClassLoader)
-
ByteArrClassLoader
public ByteArrClassLoader()
-
-
Method Detail
-
defineClass
public java.lang.Class<?> defineClass(java.lang.String name, byte[] classBytes)
- Code:
- Exact Method Body:
return defineClass(name, classBytes, 0, classBytes.length);
-
readJavaClass
public java.lang.Class<?> readJavaClass(java.lang.String classFileName) throws java.io.IOException
Retrieves a Javajava.lang.Class
instance from a'.class'
-File, using only the File-Name of said file.- Parameters:
classFileName
- The File-Name of any Java'.class'
-File- Returns:
- An instance of
java.lang.Class
- Throws:
java.io.IOException
- See Also:
defineClass(String, byte[])
- Code:
- Exact Method Body:
final byte[] bArr = FileRW.readBinary(classFileName); return this.defineClass(extractClassName(bArr), bArr);
-
readJavaClassNOIOE
public java.lang.Class<?> readJavaClassNOIOE (java.lang.String classFileName)
Retrieves a Javajava.lang.Class
instance from a'.class'
-File, using only the File-Name of said file.
Exception Suppression:
This method suppresses thejava.io.IOException
, and wraps it in Java'sUncheckedIOExceptoin
. This can make things such as Lambda-Expressions easier.- Parameters:
classFileName
- The File-Name of any Java'.class'
-File- Returns:
- An instance of
java.lang.Class
- See Also:
defineClass(String, byte[])
- Code:
- Exact Method Body:
try { final byte[] bArr = FileRW.readBinary(classFileName); return this.defineClass(extractClassName(bArr), bArr); } catch(IOException ioe) { throw new UncheckedIOException(ioe); }
-
readJavaClass
public java.lang.Class<?> readJavaClass(byte[] bArr)
Retrieves a Javajava.lang.Class
instance from abyte[]
-Array which has been loaded from disk from a'.class'
-File.- Parameters:
bArr
- Any Java'.class'
-File, as abyte[]
-Array- Returns:
- An instance of
java.lang.Class
- See Also:
defineClass(String, byte[])
- Code:
- Exact Method Body:
return this.defineClass(extractClassName(bArr), bArr);
-
extractClassName
public static java.lang.String extractClassName(byte[] bArr)
Loads the Constant-Pool from a Java'.class'
-File and extracts that class' name.- Parameters:
bArr
- Thebyte[]
-Array associated with a Java Class.- See Also:
ConstantPool
- Code:
- Exact Method Body:
final ConstantPool cp = new ConstantPool(bArr); final int i = cp.tableSizeBytes + 13; if (i >= bArr.length) throw new ClassFileArrayException ("The provided byte[]-Array isn't long enough to be a valid Java '.class' File."); final int classRecordIndex = ((bArr[i-1] & 0xFF) << 8) | (bArr[i] & 0xFF); if (classRecordIndex >= cp.tableSize) throw new ClassFileArrayException( exMsgStart(classRecordIndex) + "was out of range of the " + "ContantPool's size (which is " + cp.tableSize + ')' ); if (cp.tags.get(classRecordIndex) != ConstantPool.TAG_CLASS) throw new ClassFileArrayException (exMsgStart(classRecordIndex) + "does not contain a 'Class' Tag-Kind "); String ret = (String) cp.dereferencedValues.get(classRecordIndex); return ret.replace('/', '.');
-
-