code: public static ClassFile readFrom(InputStream in,
                                       ClassFileDataLoader loader,
                                       AttributeFactory attrFactory)
          throws IOException
      {
          if (!(in instanceof DataInput)) {
              in = new DataInputStream(in);
          }
          return readFrom((DataInput)in, loader, attrFactory);
      }
docs: Reads a ClassFile from the given InputStream. A
  {@link ClassFileDataLoader} may be provided, which allows inner class
  definitions to be loaded. Also, an {@link AttributeFactory} may be
  provided, which allows non-standard attributes to be read. All
  remaining unknown attribute types are captured, but are not decoded.
  
  @param in source of class file data
  @param loader optional loader for reading inner class definitions
  @param attrFactory optional factory for reading custom attributes
  @throws IOException for I/O error or if classfile is invalid.
  @throws ArrayIndexOutOfBoundsException if a constant pool index is out
  of range.
  @throws ClassCastException if a constant pool index references the
  wrong type.