1 2 17 18 package org.apache.poi.hpsf; 19 20 import org.apache.poi.util.HexDump; 21 22 33 public class ClassID 34 { 35 36 40 protected byte[] bytes; 41 42 43 44 51 public ClassID(final byte[] src, final int offset) 52 { 53 read(src, offset); 54 } 55 56 57 61 public ClassID() 62 { 63 bytes = new byte[LENGTH]; 64 for (int i = 0; i < LENGTH; i++) 65 bytes[i] = 0x00; 66 } 67 68 69 70 72 public static final int LENGTH = 16; 73 74 78 public int length() 79 { 80 return LENGTH; 81 } 82 83 84 85 91 public byte[] getBytes() 92 { 93 return bytes; 94 } 95 96 97 98 104 public void setBytes(final byte[] bytes) 105 { 106 for (int i = 0; i < this.bytes.length; i++) 107 this.bytes[i] = bytes[i]; 108 } 109 110 111 112 122 public byte[] read(final byte[] src, final int offset) 123 { 124 bytes = new byte[16]; 125 126 127 bytes[0] = src[3 + offset]; 128 bytes[1] = src[2 + offset]; 129 bytes[2] = src[1 + offset]; 130 bytes[3] = src[0 + offset]; 131 132 133 bytes[4] = src[5 + offset]; 134 bytes[5] = src[4 + offset]; 135 136 137 bytes[6] = src[7 + offset]; 138 bytes[7] = src[6 + offset]; 139 140 141 for (int i = 8; i < 16; i++) 142 bytes[i] = src[i + offset]; 143 144 return bytes; 145 } 146 147 148 149 160 public void write(final byte[] dst, final int offset) 161 throws ArrayStoreException 162 { 163 164 if (dst.length < 16) 165 throw new ArrayStoreException 166 ("Destination byte[] must have room for at least 16 bytes, " + 167 "but has a length of only " + dst.length + "."); 168 169 dst[0 + offset] = bytes[3]; 170 dst[1 + offset] = bytes[2]; 171 dst[2 + offset] = bytes[1]; 172 dst[3 + offset] = bytes[0]; 173 174 175 dst[4 + offset] = bytes[5]; 176 dst[5 + offset] = bytes[4]; 177 178 179 dst[6 + offset] = bytes[7]; 180 dst[7 + offset] = bytes[6]; 181 182 183 for (int i = 8; i < 16; i++) 184 dst[i + offset] = bytes[i]; 185 } 186 187 188 189 197 public boolean equals(final Object o) 198 { 199 if (o == null || !(o instanceof ClassID)) 200 return false; 201 final ClassID cid = (ClassID) o; 202 if (bytes.length != cid.bytes.length) 203 return false; 204 for (int i = 0; i < bytes.length; i++) 205 if (bytes[i] != cid.bytes[i]) 206 return false; 207 return true; 208 } 209 210 211 212 215 public int hashCode() 216 { 217 return new String (bytes).hashCode(); 218 } 219 220 221 222 228 public String toString() 229 { 230 StringBuffer sbClassId = new StringBuffer (38); 231 sbClassId.append('{'); 232 for (int i = 0; i < 16; i++) 233 { 234 sbClassId.append(HexDump.toHex(bytes[i])); 235 if (i == 3 || i == 5 || i == 7 || i == 9) 236 sbClassId.append('-'); 237 } 238 sbClassId.append('}'); 239 return sbClassId.toString(); 240 } 241 242 } 243 | Popular Tags |