рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ .class рдлрд╝рд╛рдЗрд▓ bytecode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдк рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ред

рдЫрд╡рд┐


рдпрджрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рд╕реЗ рдбрд░рддреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЕрдЧрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рд╕реЗ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рд░реБрдЪрд┐ рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓реЗрдВ "рд╡реНрдпрд╡рд╕реНрдерд┐рдд" рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рд╣реИ!


рдкрд░рд┐рдЪрдп


Habr├й рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ .class рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рдпреЛрдЯреЗрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЗрдЦ рдереЗ:
рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдкреВрд▓
рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдлрдВрдбрд╛рдореЗрдВрдЯрд▓ ,
рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" ,
JVM рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдмрд╛рдпрдЯреЗрдХреЛрдб рд╕реЗ рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡
рд╢реЛрдзрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдпрд╛ рдмрд╛рдЗрдирд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЦреЛрджрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реИред


рдмрд╛рдЗрдирд░реА рдлреЙрд░рдореЗрдЯ рдореЗрдВ рдореЗрд░реА рд░реБрдЪрд┐ рддрдм рднреА рдкреИрджрд╛ рд╣реБрдИ рдЬрдм рдореИрдВ рдПрдХ рдЫрд╛рддреНрд░ рдерд╛ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдПрдХ рдЯрд░реНрдо рдкреЗрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛ред рдХреБрдЫ рд╕рд╛рд▓ рдмрд╛рдж рдореИрдВрдиреЗ рдлреЙрд░реЗрдВрд╕рд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдкрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛рди рджрд┐рдпрд╛ - рдкреБрд░рд╛рдиреЗ рджрд┐рдиреЛрдВ рдореЗрдВ рд▓рд┐рдирдХреНрд╕ рдПрдХ рдирд╡реАрдирддрд╛ рдФрд░ рдПрдХ рдпреБрд╡рд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдерд╛, рдЬреЛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рдмрд╛рдж рд╡рдпрд╕реНрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЛ рдмрд╣реБрдд рд╕реА рдирдИ рдЪреАрдЬреЗрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдерд╛ред рдореБрдЭреЗ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ dd рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рд╕реНрдХ рд╕реЗ рдбрдВрдк рдХреИрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдбрд┐рд╕реНрдХ рдЫрд╡рд┐ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд░реЛрдЪрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреБрдХреНрдд рдЙрдкрдХрд░рдг рдереЗ, рддреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдмрд┐рдирд╛ рдЗрдореЗрдЬ (рд╣реБрд╣, рдорд╛рдЙрдВрдЯ-рд▓реВрдк ...) рдХреЛ рдмрдврд╝рд╛рдП рдмрд┐рдирд╛ рднреА рдирд┐рдХрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рдереЗред


рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЙрди рджрд┐рдиреЛрдВ рдХреЛрдИ рдЬреЗрдбреА рдЬреАрдпреВрдЖрдИ рдирд╣реАрдВ рдерд╛, рд╕рд╛рде рд╣реА рдПрдХ рд╡реИрдЪрд╛рд░рд┐рдХ рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рднреА рдерд╛, рд▓реЗрдХрд┐рди рдЬреЗрдПрдбреА рдерд╛ред рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП, JAD рдиреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛ рдСрдкрдХреЛрдб рдХрд╛ рдорд┐рд╢реНрд░рдг рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, JAD рдиреЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдЬрд╛рд╡рд╛ 6 рдореЗрдВ, рдЬреЛ рддрдм рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЙрдиреНрд╣реЗрдВ рдкреВрд░реНрдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рдореИрдВрдиреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ ...


рд╡рд┐рдЪрд╛рд░


рдореБрдЭреЗ рдмрд╛рдЗрдирд░реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓реЛрдбрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд▓реЛрдбрд░, рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝реЗрдЧрд╛ред рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ, рддрд╛рд░реЛрдВ, рдбреЗрдЯрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рдпреМрдЧрд┐рдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдЙрдирдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рд╣реИ - 1, 2, 4 рдпрд╛ 8 рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рднрд╛рд╖рд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдмрд╛рдЗрдЯ, рд╢реЙрд░реНрдЯ, рдЗрдВрдЯ, рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╛ред рдПрдХ рдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдорд╛рд░реНрдХрд░ (рддрдерд╛рдХрдерд┐рдд рдмрд┐рдЧрдЗрдВрдбрд┐рдпрди / рд▓рд┐рдЯрд┐рд▓рдПрдВрдбрд┐рдЖрдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡) рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ - рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (рдПрдПрд╕рд╕реАрдЖрдИрдЖрдИ, рдпреВрдирд┐рдХреЛрдбреЗ) рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд▓рдВрдмрд╛рдИ рд╣реИред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрд░-рд▓рдВрдмрд╛рдИ рдХреЗ рддрд╛рд░ рдХреЗ рд▓рд┐рдП, рдЖрдк рджреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ (рдкрд╛рд╕реНрдХрд▓ рдпрд╛ рд▓рдВрдмрд╛рдИ-рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рддрд╛рд░) рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдВ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЪрд░рд┐рддреНрд░ рдбрд╛рд▓реЗрдВред рд╢реВрдиреНрдп рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рдЗрдЯ (рддрдерд╛рдХрдерд┐рдд рд╢реВрдиреНрдп-рд╕рдорд╛рдкреНрдд рд╕реНрдкреНрд░рд┐рдВрдЧреНрд╕) рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рдЪрд░реНрдЪрд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рдпрджрд┐ рдЖрдХрд╛рд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рд╛рд░реВрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЕрдзрд┐рдХрддрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рд╣рдореЗрдВ рд▓рдВрдмрд╛рдИ рдорд╛рд░реНрдХрд░ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: 2 8 - 1 рдПрдХ рдмрд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП, 2 16 - 1 рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдПред


рд╣рдо рд╕рдордЧреНрд░ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рднреЗрдж рдХрд░реЗрдВрдЧреЗ, рд╕рдВрдЦреНрдпрд╛ рдФрд░ рддрд╛рд░реЛрдВ рдХреЗ рдЕрдкрдШрдЯрди рдХреЛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред


.Class рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛


рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЬрд╛рд╡рд╛ .class рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдореИрдВ рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдореЗрдВ рдХреЗрд╡рд▓ рдлрд╝реАрд▓реНрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдзреНрдпрдпрди рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ рдФрд░, рд╕рдВрднрд╡рддрдГ, рд╕реНрдЯрд░реНрд▓рд┐рдВрдЧ () рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдорд╛рдирд╡-рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рддрд░реАрдХреЗред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореИрдВ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рддрд░реНрдХ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред


рд╣рдо рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд▓реЗрддреЗ рд╣реИрдВ,
рдЬреЗрд╡реАрдПрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢, рдЬрд╛рд╡рд╛ рдПрд╕рдИ 12 рд╕рдВрд╕реНрдХрд░рдг ред
рд╣рдореЗрдВ рдЕрдиреБрднрд╛рдЧ 4 "рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓ рдлреЙрд░реНрдореЗрдЯ" рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛрдЧреАред


рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдиреЛрдЯреЗрд╢рди @FieldOrder (рдЗрдВрдбреЗрдХреНрд╕ = ...) рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдмреВрдЯрд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХреЗ рдХреНрд░рдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣рдореЗрдВ рдЙрд╕ рдЖрджреЗрд╢ рдкрд░ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗред


рдЬрд╛рд╡рд╛ .class рдлрд╝рд╛рдЗрд▓ рдореИрдЬрд┐рдХ рдирдВрдмрд░ рдХреЗ 4 рдмрд╛рдЗрдЯреНрд╕, рдЬрд╛рд╡рд╛ рдХреЗ рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдФрд░ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рд╣рдо int рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдореИрдЬрд┐рдХ рдирдВрдмрд░ рдФрд░ рд╢реЙрд░реНрдЯ рдореЗрдВ рдорд╛рдЗрдирд░ рдФрд░ рдореЗрдЬрд░ рд╡рд░реНрдЬрди рдирдВрдмрд░ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ:


@FieldOrder(index = 1) private int magic; @FieldOrder(index = 2) private short minorVersion; @FieldOrder(index = 3) private short majorVersion; 

.Class рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдЧреЗ рд╕реНрдерд┐рд░ рдкреВрд▓ (рджреЛ-рдмрд╛рдЗрдЯ рдЪрд░) рдФрд░ рд╕реНрдерд┐рд░ рдкреВрд▓ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред рд╣рдо рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╕реВрдЪреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @ContainerSize рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред рдЖрдХрд╛рд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рдо рдЗрд╕реЗ рдореВрд▓реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ) рдпрд╛ рдПрдХ рдЪрд░ рд▓рдВрдмрд╛рдИ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдкрдврд╝реЗ рдЧрдП рдЪрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо "рдлрд╝реАрд▓реНрдбрдирд╛рдо" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдЪрд░ рд╕реЗ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЖрдХрд╛рд░ рдкрдврд╝реЗрдВрдЧреЗред рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ (рдзрд╛рд░рд╛ 4.1,
"рдж рдХреНрд▓рд╛рд╕рдлрд╛рдЗрд▓ рд╕реНрдЯреНрд░рдХреНрдЪрд░"), рд╕реНрдерд┐рд░ рдкреВрд▓ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ рдореВрд▓реНрдп рд╕реЗ 1 рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ
рдЬреЛ рдирд┐рд░рдВрддрд░_рдкреБрд▓_рдХрд╛рдЙрдВрдЯ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; 

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо @ContainerSize рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрдзрд╛рд░рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:


  @FieldOrder(index = 4) private short constantPoolCount; @FieldOrder(index = 5) @ContainerSize(fieldName = "constantPoolCount", corrector = -1) private List<ConstantPoolItem> constantPoolList = new ArrayList<>(); 

рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдмрд╕ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛:
  @FieldOrder(index= 1) private int containerSize; @FieldOrder(index = 2) @ContainerSize(filed="actualContainerSize") private List<ContainerItem> containerItems; public int getActualContainerSize(){ return containerSize * 2 + 3; } 

рд▓рдЧрд╛рддрд╛рд░ рдкреВрд▓


рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдкреВрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдпрд╛ рддреЛ int, long, float, double, String, рдпрд╛ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╡рд┐рд╡рд░рдг-рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдбреНрд╕ (рдлрд╝реАрд▓реНрдбреНрд╕), рд╡рд┐рдзрд┐рдпрд╛рдБ, рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рд╕рдВрдЧрдд рдХрдВрдЯреЗрдВрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред рдпрд╣рд╛рдБ "рд╕реНрдерд┐рд░" рд╢рдмреНрдж рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреЛрдб рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдПрдХ рдЕрдирд╛рдо рдорд╛рди:


 if (intValue > 100500) 

CONSTANT_Integer рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ 100500 рдХрд╛ рдорд╛рди рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрд╛рд╡рд╛ 12 рдХреЗ рд▓рд┐рдП рдЬреЗрд╡реАрдПрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢ 17 рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рдХреЙрдиреНрд╕реНрдЯ рдкреВрд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрджрд╛рд╣рд░рдг
рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдХрд╛рд░рдЯреИрдЧ
CONSTANT_Class7
CONSTANT_Fieldref9
CONSTANT_Methodref10
CONSTANT_InterfaceMethodref11
CONSTANT_String8
CONSTANT_Integer3
CONSTANT_Float4
CONSTANT_Long5
CONSTANT_Double6
CONSTANT_NameAndType12
CONSTANT_Utf81
CONSTANT_MethodHandle15
CONSTANT_MethodType16
CONSTANT_Dynamic17
CONSTANT_InvokeDynamic18
CONSTANT_Module19
CONSTANT_Package20

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо рдПрдХ рдХреНрд▓рд╛рд╕ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрдкреБрд▓рд┐рдордо рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдЯреИрдЧ рд╣реЛрдЧрд╛, рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╕рдордп рдХрд┐рд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ, рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрдкреВрд▓ рдЗрдЯреЗрдо рдХрд╛ рд╡рдВрд╢рдЬ рдмрдирд╛рдПрдВред рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдкрдврд╝реЗ рдЧрдП рдЯреИрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
(рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рдЯреИрдЧ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЪрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╣реИрд╕ рдЗрдирд╣рд╛рдЗрдЯрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрдкреВрд▓ рдЗрдЯреЗрдо рд╡рд░реНрдЧ рдореЗрдВ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:


 public interface HasInheritor<T> { public Class<? extends T> getInheritor() throws InheritorNotFoundException; public Collection<Class<? extends T>> getInheritors(); } 

 public class ConstantPoolItem implements HasInheritor<ConstantPoolItem> { private final static Map<Byte, Class<? extends ConstantPoolItem>> m = new HashMap<>(); static { m.put((byte) 7, ClassInfo.class); m.put((byte) 9, FieldRefInfo.class); m.put((byte) 10, MethodRefInfo.class); m.put((byte) 11, InterfaceMethodRefInfo.class); m.put((byte) 8, StringInfo.class); m.put((byte) 3, IntegerInfo.class); m.put((byte) 4, FloatInfo.class); m.put((byte) 5, LongInfo.class); m.put((byte) 6, DoubleInfo.class); m.put((byte) 12, NameAndTypeInfo.class); m.put((byte) 1, Utf8Info.class); m.put((byte) 15, MethodHandleInfo.class); m.put((byte) 16, MethodTypeInfo.class); m.put((byte) 17, DynamicInfo.class); m.put((byte) 18, InvokeDynamicInfo.class); m.put((byte) 19, ModuleInfo.class); m.put((byte) 20, PackageInfo.class); } @FieldOrder(index = 1) private byte tag; @Override public Class<? extends ConstantPoolItem> getInheritor() throws InheritorNotFoundException { Class<? extends ConstantPoolItem> clazz = m.get(tag); if (clazz == null) { throw new InheritorNotFoundException(this.getClass().getName(), String.valueOf(tag)); } return clazz; } @Override public Collection<Class<? extends ConstantPoolItem>> getInheritors() { return m.values(); } } 

рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓реЛрдбрд░ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдХреЛ рддреБрд░рдВрдд рд░реЛрдХ рджреЗрдЧрд╛ рдФрд░ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред рдПрдХрдорд╛рддреНрд░ рд╢рд░реНрдд: рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЕрдВрдд-рдЯреВ-рдПрдВрдб рдирдВрдмрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрдкреВрд▓ рдЗрдЯреЗрдо, рдлреАрд▓реНрдбрдСрд░реНрдбрд░-рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ, рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "1" рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдлрд╝реАрд▓реНрдб рдкрдврд╝рддреЗ рд╣реИрдВред


.Class рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ (рдЬрд╛рд░реА)


.Class рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдмрд╛рдж рдПрдХ рджреЛ-рдмрд╛рдЗрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЪрд╛рд╣реЗ рд╡рд╣ рд╡рд░реНрдЧ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд╣реЛ, рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ, рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдЕрдВрддрд┐рдо рдзреНрд╡рдЬ рд╣реИ, рдЖрджрд┐ред рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рджреЛ-рдмрд╛рдЗрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХрд╛ рд╕рдВрджрд░реНрдн) рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ClassInfo рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЛ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ "рд╡рд┐рд╕реНрддрд╛рд░" рд╢рдмреНрдж рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЬрд┐рди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдирд╣реАрдВ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИред


рдЬрд╛рд╡рд╛ рдореЗрдВ, рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛
рдЗрд╕ рд╢реНрд░реЗрдгреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:


  @FieldOrder(index = 9) private short interfacesCount; @FieldOrder(index = 10) @ContainerSize(fieldName = "interfacesCount") private List<Short> interfaceIndexList; 

InterfaceIndexList рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ ClassInfo рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рд╡рд░реНрдЧ рдЪрд░ (рдЧреБрдг, рдХреНрд╖реЗрддреНрд░) рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕реВрдЪрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


  @FieldOrder(index = 11) private short fieldsCount; @FieldOrder(index = 12) @ContainerSize(fieldName = "fieldsCount") private List<Field> fieldList; @FieldOrder(index = 13) private short methodsCount; @FieldOrder(index = 14) @ContainerSize(fieldName = "methodsCount") private List<Method> methodList; 

рдЬрд╛рд╡рд╛ .class рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЕрдВрддрд┐рдо рддрддреНрд╡ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рд╣реИред рд╡рд░реНрдЧ, рдиреЗрд╕реНрдЯреЗрдб рдХрдХреНрд╖рд╛рдУрдВ рдЖрджрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЧреБрдг рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдЬрд╛рд╡рд╛ рдмрд╛рдпрдЯреЗрдХреЛрдб рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рд▓реЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рд▓рд┐рдЯрд┐рд▓рдПрдВрдбрд┐рдпрди рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЙрди рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреА рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди
рдЯрд░реНрдорд┐рдирд▓ рдЪрд░рд┐рддреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рд╕реА-рдЬреИрд╕реЗ рд╢реВрдиреНрдп-рд╕рдорд╛рдкреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕) рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ
@StringTerminator рдПрдиреЛрдЯреЗрд╢рди:


  @FieldOrder(index = 2) @StringTerminator(0) private String nullTerminatedString; 

рдХрднреА-рдХрднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред MethodList рдореЗрдВ рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╕реНрдерд┐рдд рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрд╕рдХрд╛ рдирд╛рдо рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдм рдЬрд╛рдирдХрд╛рд░реА рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ рддрддреНрд╡реЛрдВ рдкрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдорд╛рдирд╡-рдЕрдиреБрдХреВрд▓ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ, рди рдХрд┐ рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ рддрддреНрд╡реЛрдВ рдкрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд░реВрдк рдореЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рд╡рд░реНрдЧ рдХреЛ рдХреЙрдиреНрд╕реНрдЯреИрдВрдЯрдкреВрд▓рд┐рд╕реНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдФрд░ рдЗрд╕ рдХреНрд▓реИрд╕рд┐рдВрдбреЗрдХреНрд╕ рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрддрд░реЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрдВрдЬреЗрдХреНрд╢рди рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:


  @FieldOrder(index = 14) @ContainerSize(fieldName = "methodsCount") @Inject(fieldName = "constantPoolList") @Inject(fieldName = "thisClassIndex") private List<Method> methodList; 

рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ (ClassFile) рдореЗрдВ рдирд┐рд░рдВрддрд░рдкреВрд▓рд┐рд╕реНрдЯ рдФрд░ рдЗрд╕рдХреНрд▓рд╛рд╕рдЗрдВрдбреЗрдХреНрд╕ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯреНрдЯрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдЧ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рдзрд┐) рдореЗрдВ, рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ)ред


рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдмреВрдЯрд▓реЛрдбрд░


рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣рд╕ рдЗрдирд╣реЗрд░реАрдЯрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдкрд╛рдВрдЪ рдПрдиреЛрдЯреЗрд╢рди @FieldOrder, @ContainerSize, LittleEndian , Inject рдФрд░ @StringTerminator рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдмрд╛рдЗрдирд░реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╡рд░рдг рд╣реЛрдиреЗ рдкрд░, рд╣рдо рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд▓реЛрдбрд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд░реНрдгрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЛ рддреБрд░рдВрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:


  ClassFile classFile; try (InputStream is = new FileInputStream(inputFileName)) { Loader loader = new InputStreamLoader(is); classFile = (ClassFile) loader.load(); } 

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреВрд▓ рдореЗрдВ рдЖрда-рдмрд╛рдЗрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рдкрд░рд┐рд╖реНрдХреГрдд рд╣реИрдВред
рд╕реНрдерд┐рд░рд╛рдВрдХ рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдкрд╣рд▓реА рдХреЛрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рд░рд╣рддрд╛ рд╣реИ
рдЦрд╛рд▓реА рдХрд░реЗрдВред рдпрд╣ рд▓рдВрдмреЗ рдФрд░ рджреЛрд╣рд░реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред


рдЬреЗрд╡реАрдПрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рд╡рд┐рд╡рд░рдг

рд╕рднреА 8-рдмрд╛рдЗрдЯ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрдХреНрд╖рд╛ рдХреА рдирд┐рд░рдВрддрд░_рдкреБрд▓ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд▓реЗрддреЗ рд╣реИрдВ
рдлрд╝рд╛рдЗрд▓ред рдпрджрд┐ рдПрдХ CONSTANT_Long_info рдпрд╛ CONSTANT_Double_info рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ
рд╕реНрдерд┐рд░_рдкреНрд░рд╛рдердорд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ n рдкрд░, рддрдм рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрдЧрд▓реА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ
рд╕реВрдЪрдХрд╛рдВрдХ n + 2 рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдирд┐рд░рдВрддрд░_рдкреВрд▓ рд╕реВрдЪрдХрд╛рдВрдХ n + 1 рд╡реИрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
рд╡реНрдпрд░реНрдеред


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ
рдпрд╣ рдорд╛рдирд╛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдп рдмрджрд▓ рдЧрдпрд╛
рдЕрд╕рдлрд▓ред

рд░реЗрдЯреНрд░реЛрд╕реНрдкреЗрдХреНрдЯ рдореЗрдВ, 8-рдмрд╛рдЗрдЯ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рджреЛ рд╕реНрдерд┐рд░ рдкреВрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдмрдирд╛рдирд╛ рдПрдХ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рдерд╛ред


рдЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо @EntrySize рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ,
рдЖрда рдмрд╛рдЗрдЯ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЯреИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:


 @EntrySize(value = 2, index = 1) public class EightByteNumberInfo extends ConstantPoolItem { @FieldOrder(index = 2) private int highBytes; @FieldOrder(index = 3) private int lowBytes; } 

рдореВрд▓реНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ рддрддреНрд╡ рдХрдмреНрдЬрд╛ рдХрд░реЗрдВрдЧреЗ, рд╕реВрдЪрдХрд╛рдВрдХ - рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ,
рдЬрд┐рд╕рдореЗрдВ рдорд╛рди рд╣реЛрддрд╛ рд╣реИред LongInfo рдФрд░ DoubleInfo рд╡рд░реНрдЧ EightByteNumberInfo рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдмреВрдЯрд▓реЛрдбрд░ рдХреЛ @EntrySize рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред


  public ClassFileLoader(String fileName) { try { File f = new File(fileName); FileInputStream fis = new FileInputStream(f); loader = new EntrySizeSupportLoader(fis); } catch (FileNotFoundException e) { throw new RuntimeException(e); } } 

ClassFileLoader рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдбрд┐рдмрдЧрд░ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ IDE рдореЗрдВ рдЪрд░ рдирд┐рд░реАрдХреНрд╖рдХ рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
рдЫрд╡рд┐


рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдкреВрд▓ рдЗрд╕ рддрд░рд╣ рд╣реИ:
рдЫрд╡рд┐


рдирд┐рд╖реНрдХрд░реНрд╖


рдЬреЛ рдХреЛрдИ рднреА рдЕрдВрдд рддрдХ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╣ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рдЪреБрди рд╕рдХрддрд╛ рд╣реИред рдЧрд┐рддреБрдм рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдФрд░ рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд┐рд╡рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ: https://github.com/esavin/annotate4j-classfile ред рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд▓реЛрдбрд░ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдпрд╣рд╛рдБ рд╣реИрдВ: https://github.com/esavin/annotate4j-core


рд╕рдВрдХрд▓рд┐рдд рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, annotate4j.classfile.loader.ClassFileLoader рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдЬрд╛рд╡рд╛ 6 рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рдереЗ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдХреЛ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛ рдУрдкрдХреЛрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рд▓реЛрдбрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рддрд╛рдХрдд рдФрд░ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдЫреЛрдЯреЗ рд╡рд┐рдХрд╛рд╕ рд╣реИрдВред


рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдореБрдЦреНрдп рднрд╛рдЧ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВ рд╣реЛрд▓реНрдЯрд░ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ (рджреИрдирд┐рдХ рд╣реГрджрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдИрд╕реАрдЬреА рдЕрдзреНрдпрдпрди) рдХреЗ рд╕рд╛рде рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рджреВрд╕рд░реА рдУрд░, рдореИрдВ рдбреЗрд▓реНрдлреА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдХ рд▓реЗрдЦрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рддрд╛рд░реАрдЦреЗрдВ рдХреИрд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдирд┐рд░реНрдорд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред


рдореИрдВрдиреЗ ELF рдкреНрд░рд╛рд░реВрдк (рдпреВрдирд┐рдХреНрд╕ / рд▓рд┐рдирдХреНрд╕ рдкрд░ рд░рди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рд░реВрдк) рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдорд╛рди рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рд╕рдХрд╛ - рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ред рдПрдХ рд╣реА рднрд╛рдЧреНрдп рдЬреЗрдкреАрдИрдЬреА рдФрд░ рдмреАрдПрдордкреА рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ - рд╣рд░ рд╕рдордп рдЬрдм рдореИрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХреБрдЫ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред

Source: https://habr.com/ru/post/hi481260/


All Articles