private Constant readConstant() throws InvalidClassFileFormatException, IOException {
  int tag=in.readUnsignedByte();
  if (tag < 0 || tag >= CONSTANT_FORMAT_MAP.length) {
    throw new InvalidClassFileFormatException(expectedClassDescriptor,codeBaseEntry);
  }
  String format=CONSTANT_FORMAT_MAP[tag];
  if (format == null) {
    throw new InvalidClassFileFormatException(expectedClassDescriptor,codeBaseEntry);
  }
  Object[] data=new Object[format.length()];
  for (int i=0; i < format.length(); i++) {
    char spec=format.charAt(i);
switch (spec) {
case '8':
      data[i]=in.readUTF();
    break;
case 'I':
  data[i]=in.readInt();
break;
case 'F':
data[i]=Float.valueOf(in.readFloat());
break;
case 'L':
data[i]=in.readLong();
break;
case 'D':
data[i]=Double.valueOf(in.readDouble());
break;
case 'i':
data[i]=in.readUnsignedShort();
break;
case 'b':
data[i]=in.readUnsignedByte();
break;
default :
throw new IllegalStateException();
}
}
return new Constant(tag,data);
}

private Constant readConstant ( ) throws InvalidClassFileFormatException , IOException { int tag = in . readUnsignedByte ( ) ; if ( tag < 0 || tag >= CONSTANT_FORMAT_MAP . length ) { throw new InvalidClassFileFormatException ( expectedClassDescriptor , codeBaseEntry ) ; } String format = CONSTANT_FORMAT_MAP [ tag ] ; if ( format == null ) { throw new InvalidClassFileFormatException ( expectedClassDescriptor , codeBaseEntry ) ; } Object [ ] data = new Object [ format . length ( ) ] ; for ( int i = 0 ; i < format . length ( ) ; i ++ ) { char spec = format . charAt ( i ) ; switch ( spec ) { case '8' : data [ i ] = in . readUTF ( ) ; break ; case 'I' : data [ i ] = in . readInt ( ) ; break ; case 'F' : data [ i ] = Float . valueOf ( in . readFloat ( ) ) ; break ; case 'L' : data [ i ] = in . readLong ( ) ; break ; case 'D' : data [ i ] = Double . valueOf ( in . readDouble ( ) ) ; break ; case 'i' : data [ i ] = in . readUnsignedShort ( ) ; break ; case 'b' : data [ i ] = in . readUnsignedByte ( ) ; break ; default : throw new IllegalStateException ( ) ; } } return new Constant ( tag , data ) ; }
read a constant from the constant pool . return null for
