public static ClassFile Load(String fileName) throws ClassFileLoaderException, FrameException
    {
        DataInputStream mainInput = getMainInputStream(fileName);
        ClassFile classFile;
        
        try
        {
            classFile = new ClassFile();
            
            classFile.setMagic(mainInput.readInt()); // заголовок
            classFile.setMinor(mainInput.readUnsignedShort());
            classFile.setMajor(mainInput.readUnsignedShort());
            
            classFile.setConstant_pool_count(mainInput.readUnsignedShort()); // пул констант
            LinkedList<CONSTANTPoolElement> constantPool = PoolElementLoader.loadElements(
                    mainInput, classFile.getConstant_pool_count());
            classFile.setConstantPool(constantPool);
            
            classFile.setAccess_flags(mainInput.readUnsignedShort()); // флаги доступа
            
            classFile.setThis_class(mainInput.readUnsignedShort()); // this и super
            classFile.setSuper_class(mainInput.readUnsignedShort());
            
            classFile.setInterfaces_count(mainInput.readUnsignedShort()); // интерфейсы
            LinkedList<Integer> interfaces = new LinkedList<Integer>();
            
            for (int i=0; i < classFile.getInterfaces_count(); i++)
            {
                interfaces.add(mainInput.readUnsignedShort());
            }
            classFile.setInterfaces(interfaces);
            
            classFile.setFileds_count(mainInput.readUnsignedShort()); // поля
            LinkedList<Field> fields = FieldLoader.loadElements(mainInput, constantPool, classFile.getFileds_count());
            classFile.setField_info(fields);
            
            classFile.setMethods_count(mainInput.readUnsignedShort()); // методы
            LinkedList<Method> methods = MethodLoader.loadElements(mainInput, constantPool, classFile.getMethods_count());
            classFile.setMethods(methods);
            
            classFile.setAttribute_count(mainInput.readShort()); // атрибуты
            LinkedList<AbstractAttribute> attributes = AttributeLoader.loadElements(mainInput, constantPool, classFile.getAttribute_count());
            classFile.setAtributes(attributes);
            
            
            
            
            
            
            
            
            
        }
        catch(EOFException ex)
        {
            throw new ClassFileLoaderException("Неожиданный конец файла", ex);
        }
        catch(IOException ex)
        {
            throw new ClassFileLoaderException("Ошибка загрузки файла: ", ex);
        }
        catch(FrameException ex)
        {
            throw new ClassFileLoaderException("Ошибка структуры файла", ex);
        }
        catch(IllegalStateException ex)
        {
            throw new ClassFileLoaderException("Ошибка структуры файла: ", ex);
        }
        catch(Exception ex)
        {
            throw new ClassFileLoaderException("Неизвестная ошибка: ", ex);
        }
        return classFile;
    }