Если вам просто нужно имя класса, вероятно, проще разобрать начало файла класса, а не добавлять стороннюю библиотеку для манипулирования кодом класса только для этой цели. Вам просто нужны классы и строки из пула констант, пропустите флаги доступа и затем замените / на. в названии класса. Если у вас есть байтовый массив, вы можете вызвать этот метод с помощью new ByteArrayInputStream(byteArray)
:
public static String getClassName(InputStream is) throws Exception {
DataInputStream dis = new DataInputStream(is);
dis.readLong(); // skip header and class version
int cpcnt = (dis.readShort()&0xffff)-1;
int[] classes = new int[cpcnt];
String[] strings = new String[cpcnt];
for(int i=0; i<cpcnt; i++) {
int t = dis.read();
if(t==7) classes[i] = dis.readShort()&0xffff;
else if(t==1) strings[i] = dis.readUTF();
else if(t==5 || t==6) { dis.readLong(); i++; }
else if(t==8) dis.readShort();
else dis.readInt();
}
dis.readShort(); // skip access flags
return strings[classes[(dis.readShort()&0xffff)-1]-1].replace('/', '.');
}