in core/src/main/java/org/apache/james/mime4j/io/BufferedLineReaderInputStream.java [261:303]
public int indexOf(final byte[] pattern, int off, int len) {
if (pattern == null) {
throw new IllegalArgumentException("Pattern may not be null");
}
if (off < this.bufpos || len < 0 || off + len > this.buflen) {
throw new IndexOutOfBoundsException("looking for "+off+"("+len+")"+" in "+bufpos+"/"+buflen);
}
if (len < pattern.length) {
return -1;
}
for (int i = 0; i < shiftTable.length; i++) {
shiftTable[i] = pattern.length + 1;
}
for (int i = 0; i < pattern.length; i++) {
int x = pattern[i] & 0xff;
shiftTable[x] = pattern.length - i;
}
int j = 0;
while (j <= len - pattern.length) {
int cur = off + j;
boolean match = true;
for (int i = 0; i < pattern.length; i++) {
if (this.buffer[cur + i] != pattern[i]) {
match = false;
break;
}
}
if (match) {
return cur;
}
int pos = cur + pattern.length;
if (pos >= this.buffer.length) {
break;
}
int x = this.buffer[pos] & 0xff;
j += shiftTable[x];
}
return -1;
}