private void initialize() throws IOException {

        if (readUShort(1, true) != 256 - 54
                || readUShort(1, true) != 254
                || readUShort(1, true) != 256 - 70
                || readUShort(1, true) != 256 - 66)
            throw new IOException("Invalid magic bytes");

        skip(4);

        int constantPoolCount = readUShort(2, true);
        readConstantPool(constantPoolCount);

        skip(2);//Access Flags

        int thisClassInfoIndex = readUShort(2, true);

        className = strings.get(classes.get(thisClassInfoIndex));

        skip(2);//Super class

        int interfacesCount = readUShort(2, true);
        skip(2 * interfacesCount);

        int fieldsCount = readUShort(2, true);
        skipFieldsInfo(fieldsCount);

        int methodsCount = readUShort(2, true);
        readMethods(methodsCount);
    }