public ClassReader (final String name) throws IOException { this(ClassLoader.getSystemResourceAsStream( name.replace('.','/') + ".class"));
public ClassReader (final byte[] b) { this.b = b;  items = new int[readUnsignedShort(8)]; strings = new String[items.length]; int max = 0; int index = 10; for (int i = 1; i < items.length; ++i) { items[i] = index + 1; int tag = b[index]; int size; switch (tag) { case ClassWriter.FIELD: case ClassWriter.METH: case ClassWriter.IMETH: case ClassWriter.INT: case ClassWriter.FLOAT: case ClassWriter.NAME_TYPE: size = 5; break; case ClassWriter.LONG: case ClassWriter.DOUBLE: size = 9; ++i; break; case ClassWriter.UTF8: size = 3 + readUnsignedShort(index + 1); max = (size > max ? size : max); break;   default: size = 3; break; } index += size; } buf = new char[max];  header = index;
  public ClassReader (final String name) throws IOException {    this(ClassLoader.getSystemResourceAsStream(      name.replace('.','/') + ".class"));  }