java.lang.Object
com.alibaba.nacos.common.packagescan.classreading.ClassReader

public class ClassReader extends Object
Copy from ASM, with less modifications A parser to make a visit a ClassFile structure, as defined in the Java Virtual Machine Specification (JVMS). This class parses the ClassFile content and calls the appropriate visit methods of a given ClassVisitor for each field, method and bytecode instruction encountered.
作者:
Eric Bruneton, Eugene Kuleshov
另请参阅:
  • 字段详细资料

    • SKIP_CODE

      public static final int SKIP_CODE
      A flag to skip the Code attributes. If this flag is set the Code attributes are neither parsed nor visited.
      另请参阅:
    • V19

      public static final int V19
      另请参阅:
    • SKIP_DEBUG

      public static final int SKIP_DEBUG
      A flag to skip the SourceFile.
      另请参阅:
    • SKIP_FRAMES

      public static final int SKIP_FRAMES
      A flag to skip the StackMap and StackMapTable attributes. If this flag is set these attributes are neither parsed nor visited is not called). This flag is useful when the option is used: it avoids visiting frames that will be ignored and recomputed from scratch.
      另请参阅:
    • EXPAND_FRAMES

      public static final int EXPAND_FRAMES
      A flag to expand the stack map frames. By default stack map frames are visited in their original format (i.e. "expanded" for classes whose version is less than V1_6, and "compressed" for the other classes). If this flag is set, stack map frames are always visited in expanded format (this option adds a decompression/compression step in ClassReader and ClassWriter which degrades performance quite a lot).
      另请参阅:
    • b

      @Deprecated public final byte[] b
      已过时。
      Use readByte(int) and the other read methods instead. This field will eventually be deleted.
      A byte array containing the JVMS ClassFile structure to be parsed.
  • 构造器详细资料

    • ClassReader

      public ClassReader(byte[] classFile)
      Constructs a new ClassReader object.
      参数:
      classFile - the JVMS ClassFile structure to be read.
    • ClassReader

      public ClassReader(byte[] classFileBuffer, int classFileOffset, int classFileLength)
      Constructs a new ClassReader object.
      参数:
      classFileBuffer - a byte array containing the JVMS ClassFile structure to be read.
      classFileOffset - the offset in byteBuffer of the first byte of the ClassFile to be read.
      classFileLength - the length in bytes of the ClassFile to be read.
    • ClassReader

      public ClassReader(InputStream inputStream) throws IOException
      Constructs a new ClassReader object.
      参数:
      inputStream - an input stream of the JVMS ClassFile structure to be read. This input stream must contain nothing more than the ClassFile structure itself. It is read from its current position to its end.
      抛出:
      IOException - if a problem occurs during reading.
    • ClassReader

      public ClassReader(String className) throws IOException
      Constructs a new ClassReader object.
      参数:
      className - the fully qualified name of the class to be read. The ClassFile structure is retrieved with the current class loader's ClassLoader.getSystemResourceAsStream(java.lang.String).
      抛出:
      IOException - if an exception occurs during reading.
  • 方法详细资料

    • getAccess

      public int getAccess()
      Returns the class's access flags . This value may not reflect Deprecated and Synthetic flags when bytecode is before 1.5 and those flags are represented by attributes.
      返回:
      the class access flags.
    • getClassName

      public String getClassName()
      the internal class name.
    • getSuperName

      public String getSuperName()
    • getInterfaces

      public String[] getInterfaces()
      the internal names of the directly implemented interfaces. Inherited implemented interfaces are not returned.
    • getItemCount

      public int getItemCount()
      Returns the number of entries in the class's constant pool table.
      返回:
      the number of entries in the class's constant pool table.
    • getItem

      public int getItem(int constantPoolEntryIndex)
      Returns the start offset in this ClassReader of a JVMS 'cp_info' structure (i.e. a constant pool entry), plus one. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      constantPoolEntryIndex - the index a constant pool entry in the class's constant pool table.
      返回:
      the start offset in this ClassReader of the corresponding JVMS 'cp_info' structure, plus one.
    • getMaxStringLength

      public int getMaxStringLength()
      Returns a conservative estimate of the maximum length of the strings contained in the class's constant pool table.
      返回:
      a conservative estimate of the maximum length of the strings contained in the class's constant pool table.
    • readByte

      public int readByte(int offset)
      Reads a byte value in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start offset of the value to be read in this ClassReader.
      返回:
      the read value.
    • readUnsignedShort

      public int readUnsignedShort(int offset)
      Reads an unsigned short value in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start index of the value to be read in this ClassReader.
      返回:
      the read value.
    • readShort

      public short readShort(int offset)
      Reads a signed short value in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start offset of the value to be read in this ClassReader.
      返回:
      the read value.
    • readInt

      public int readInt(int offset)
      Reads a signed int value in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start offset of the value to be read in this ClassReader.
      返回:
      the read value.
    • readLong

      public long readLong(int offset)
      Reads a signed long value in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start offset of the value to be read in this ClassReader.
      返回:
      the read value.
    • readUtf8

      public String readUtf8(int offset, char[] charBuffer)
      Reads a CONSTANT_Utf8 constant pool entry in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start offset of an unsigned short value in this ClassReader, whose value is the index of a CONSTANT_Utf8 entry in the class's constant pool table.
      charBuffer - the buffer to be used to read the string. This buffer must be sufficiently large. It is not automatically resized.
      返回:
      the String corresponding to the specified CONSTANT_Utf8 entry.
    • readClass

      public String readClass(int offset, char[] charBuffer)
      Reads a CONSTANT_Class constant pool entry in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start offset of an unsigned short value in this ClassReader, whose value is the index of a CONSTANT_Class entry in class's constant pool table.
      charBuffer - the buffer to be used to read the item. This buffer must be sufficiently large. It is not automatically resized.
      返回:
      the String corresponding to the specified CONSTANT_Class entry.
    • readModule

      public String readModule(int offset, char[] charBuffer)
      Reads a CONSTANT_Module constant pool entry in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start offset of an unsigned short value in this ClassReader, whose value is the index of a CONSTANT_Module entry in class's constant pool table.
      charBuffer - the buffer to be used to read the item. This buffer must be sufficiently large. It is not automatically resized.
      返回:
      the String corresponding to the specified CONSTANT_Module entry.
    • readPackage

      public String readPackage(int offset, char[] charBuffer)
      Reads a CONSTANT_Package constant pool entry in this ClassReader. This method is intended for Attribute sub classes, and is normally not needed by class generators or adapters.
      参数:
      offset - the start offset of an unsigned short value in this ClassReader, whose value is the index of a CONSTANT_Package entry in class's constant pool table.
      charBuffer - the buffer to be used to read the item. This buffer must be sufficiently large. It is not automatically resized.
      返回:
      the String corresponding to the specified CONSTANT_Package entry.