1 26 package com.yworks.yguard.obf.classfile; 27 28 import java.io.*; 29 import java.util.*; 30 31 36 public class Utf8CpInfo extends CpInfo 37 { 38 40 41 private int u2length; 43 private byte[] bytes; 44 private String utf8string; 45 46 47 49 50 protected Utf8CpInfo() 52 { 53 super(CONSTANT_Utf8); 54 } 55 56 57 public Utf8CpInfo(String s) 58 { 59 super(CONSTANT_Utf8); 60 setString(s); 61 refCount = 1; 62 } 63 64 65 public void decRefCount() 66 { 67 super.decRefCount(); 68 if (refCount == 0) 69 { 70 clearString(); 71 } 72 } 73 74 75 public String getString() 76 { 77 if (utf8string == null) 78 { 79 try{ 80 utf8string = new String (bytes, "UTF8"); 81 } catch (UnsupportedEncodingException uee){ 82 throw new RuntimeException ("Could not decode UTF8"); 83 } 84 } 85 return utf8string; 86 } 87 88 89 public void setString(String str) 90 { 91 utf8string = str; 92 try{ 93 bytes = str.getBytes("UTF8"); 94 } catch (UnsupportedEncodingException uee){ 95 throw new RuntimeException ("Could not encode UTF8"); 96 } 97 u2length = bytes.length; 98 } 99 100 101 public void clearString() 102 { 103 u2length = 0; 104 bytes = new byte[0]; 105 utf8string = null; 106 getString(); 107 } 108 109 110 protected void readInfo(DataInput din) throws java.io.IOException 111 { 112 u2length = din.readUnsignedShort(); 113 bytes = new byte[u2length]; 114 din.readFully(bytes); 115 getString(); 116 } 117 118 119 protected void writeInfo(DataOutput dout) throws java.io.IOException 120 { 121 dout.writeShort(u2length); 122 if (bytes.length > 0) { 123 dout.write(bytes); 124 } 125 } 126 } 127 | Popular Tags |