Class ByteArrClassLoader

    • 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
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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 Java java.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 Java java.lang.Class instance from a '.class'-File, using only the File-Name of said file.

        Exception Suppression:
        This method suppresses the java.io.IOException, and wraps it in Java's UncheckedIOExceptoin. 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 Java java.lang.Class instance from a byte[]-Array which has been loaded from disk from a '.class'-File.
        Parameters:
        bArr - Any Java '.class'-File, as a byte[]-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 - The byte[]-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('/', '.');