1 9 package com.vladium.jcd.cls.attribute; 10 11 import java.io.IOException ; 12 13 import com.vladium.jcd.lib.UDataInputStream; 14 import com.vladium.jcd.lib.UDataOutputStream; 15 16 25 public 26 final class GenericAttribute_info extends Attribute_info 27 { 28 30 31 public byte [] m_info; 32 33 34 public GenericAttribute_info (final int attribute_name_index, final byte [] info) 35 { 36 super (attribute_name_index, (info != null ? info.length : 0)); 37 38 m_info = (info != null ? info : EMPTY_BYTE_ARRAY); 39 } 40 41 42 public long length () 43 { 44 return 6 + m_info.length; 45 } 46 47 49 public void accept (final IAttributeVisitor visitor, final Object ctx) 50 { 51 visitor.visit (this, ctx); 52 } 53 54 public String toString () 55 { 56 return "generic attribute_info: [attribute_name_index = " + m_name_index + ", attribute_length = " + m_attribute_length + ']'; 57 } 58 59 61 64 public Object clone () 65 { 66 final GenericAttribute_info _clone = (GenericAttribute_info) super.clone (); 67 68 _clone.m_info = (m_info.length == 0 ? EMPTY_BYTE_ARRAY : (byte []) m_info.clone ()); 70 71 return _clone; 72 } 73 74 76 public void writeInClassFormat (final UDataOutputStream out) throws IOException 77 { 78 super.writeInClassFormat (out); 79 80 out.write (m_info, 0, m_info.length); 81 } 82 83 85 87 88 GenericAttribute_info (final int attribute_name_index, final long attribute_length, 89 final UDataInputStream bytes) 90 throws IOException 91 { 92 super (attribute_name_index, attribute_length); 93 94 m_info = new byte [(int) m_attribute_length]; 95 bytes.readFully (m_info); 96 } 97 98 100 101 private static final byte [] EMPTY_BYTE_ARRAY = new byte [0]; 102 103 } | Popular Tags |