Exemple #1
0
        public static Class Read(Stream Input)
        {
            BinaryReader Reader = new BinaryReader(Input);

            uint FileMagic = Reader.ReadUInt32BE();

            if (FileMagic != Magic)
            {
                return(null);
            }

            ConstantPoolReader CPReader = new ConstantPoolReader();

            Class Result = new Class();

            Result.MinorVersion = Reader.ReadUInt16BE();
            Result.MajorVersion = Reader.ReadUInt16BE();
            ConstantPool Pool = Result.ConstantPool = CPReader.Read(Reader);

            Result.AccessFlag = (ClassAccessFlag)Reader.ReadUInt16BE();
            Result.ThisClass  = ((Constants.Class)Pool[Reader.ReadUInt16BE()]).Value;

            ushort SuperClassIndex = Reader.ReadUInt16BE();

            if (SuperClassIndex != 0)
            {
                Result.SuperClass = ((Constants.Class)Pool[SuperClassIndex]).Value;
            }

            ushort InterfacesCount = Reader.ReadUInt16BE();

            while (InterfacesCount-- > 0)
            {
                Result.Interfaces.Add(((Constants.Class)Pool[Reader.ReadUInt16BE()]).Value);
            }

            ushort FieldsCount = Reader.ReadUInt16BE();

            while (FieldsCount-- > 0)
            {
                Result.Fields.Add(Field.Read(Reader, Pool));
            }

            ushort MethodsCount = Reader.ReadUInt16BE();

            while (MethodsCount-- > 0)
            {
                Result.Methods.Add(Method.Read(Reader, Pool));
            }

            ushort AttrCount = Reader.ReadUInt16BE();

            while (AttrCount-- > 0)
            {
                Result.Attributes.Add(Attribute.ReadAttribute(Reader, Pool));
            }

            return(Result);
        }
Exemple #2
0
 public abstract void FillData(byte[] Data, ConstantPoolReader Reader);