1 package com.quadcap.util; 2 3 40 41 import java.io.ByteArrayInputStream ; 42 import java.io.InputStream ; 43 import java.io.IOException ; 44 import java.io.OutputStream ; 45 46 51 public class OctetString { 52 byte[] data; 53 54 60 public OctetString(byte[] data) { 61 this.data = data; 62 } 63 64 73 public OctetString(byte[] data, int offset, int len) { 74 this.data = new byte[len]; 75 System.arraycopy(data, offset, this.data, 0, len); 76 } 77 78 83 public OctetString(String str) { 84 this.data = str.getBytes(); 85 } 86 87 92 public String toString() { return new String (data); } 93 94 99 public byte[] getBytes() { return data; } 100 101 public int hashCode() { 102 return new String (data).hashCode(); 103 } 104 105 public boolean equals(Object obj) { 106 if (obj instanceof OctetString) { 107 return OctetComparator.cmp.compare(this, (OctetString)obj) == 0; 108 } 109 return false; 110 } 111 112 public boolean equalsIgnoreCase(Object obj) { 113 if (obj instanceof OctetString) { 114 OctetString other = (OctetString)obj; 115 return OctetComparator.casecmp.compare(this, other) == 0; 116 } 117 return false; 118 } 119 120 123 public int size() { return data.length; } 124 125 128 public static boolean equals(OctetString s1, int pos1, 129 OctetString s2, int pos2, int len) { 130 for (int i = 0; i < len; i++) { 131 if (pos1 + i >= s1.data.length || 132 pos2 + i >= s2.data.length) return false; 133 if (s1.data[pos1 + i] != s2.data[pos2 + i]) return false; 134 } 135 return true; 136 } 137 138 145 public int indexOf(char c) { 146 byte b = (byte)c; 147 for (int i = 0; i < data.length; i++) if (data[i] == b) return i; 148 return -1; 149 } 150 151 158 public int lastIndexOf(char c) { 159 byte b = (byte)c; 160 for (int i = data.length-1; i >= 0; i--) if (data[i] == b) return i; 161 return -1; 162 } 163 164 171 public OctetString substring(int start, int end) { 172 return new OctetString(data, start, end - start); 173 } 174 175 183 public OctetString substring(int start) { 184 return substring(start, size()); 185 } 186 187 188 200 public OctetString afterLast(char c) { 201 int pos = data.length; 202 while (pos >= 0 && c != data[--pos]) continue; 203 pos++; 204 int len = data.length - pos; 205 return substring(pos); 206 } 207 208 215 public OctetString before(char c) { 216 int idx = indexOf(c); 217 if (idx < 0) return null; 218 return substring(0, idx); 219 } 220 221 234 public OctetString beforeLast(char c) { 235 int len = data.length; 236 while (len >= 0 && c != data[--len]) continue; 237 return substring(0, len); 238 } 239 240 249 public int getIntSubString(int start, int end) { 250 int val = 0; 251 for (int i = 0; i < end; i++) { 252 val *= 10; 253 val += Character.digit((char)(data[i]), 10); 254 } 255 return val; 256 } 257 258 261 public OctetString append(String s) { 262 return append(s.getBytes()); 263 } 264 265 268 public OctetString append(OctetString s) { 269 return append(s.data); 270 } 271 272 275 public OctetString append(byte[] b) { 276 int len = data.length + b.length; 277 byte[] ret = new byte[len]; 278 System.arraycopy(data, 0, ret, 0, data.length); 279 System.arraycopy(b, 0, ret, data.length, b.length); 280 return new OctetString(ret); 281 } 282 283 } 284 285 | Popular Tags |