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); }
public abstract void FillData(byte[] Data, ConstantPoolReader Reader);