in mantis-common/src/main/java/io/mantisrx/common/compression/CompressionUtils.java [207:262]
static List<MantisServerSentEvent> tokenize(BufferedReader bf, String delimiter) throws IOException {
StringBuilder sb = new StringBuilder();
String line;
List<MantisServerSentEvent> msseList = new ArrayList<>();
final int delimiterLength = delimiter.length();
char[] delimiterArray = delimiter.toCharArray();
int delimiterCount = 0;
while ((line = bf.readLine()) != null) {
// Consider replacing this whole thing with just String.indexOf
for (int i = 0; i < line.length(); i++) {
if (line.charAt(i) != delimiterArray[delimiterCount]) {
if (delimiterCount > 0) {
boolean prefixMatch = true;
for (int j = delimiterCount - 1; j >= 0; j--) {
if (line.charAt(i) != delimiterArray[j]) {
prefixMatch = false;
break;
}
}
if (!prefixMatch) {
for (int j = 0; j < delimiterCount; ++j) {
sb.append(delimiterArray[j]);
}
delimiterCount = 0;
}
}
if (line.charAt(i) != delimiterArray[delimiterCount]) {
sb.append(line.charAt(i));
} else {
delimiterCount++;
}
} else {
delimiterCount++;
}
if (delimiterCount == delimiterLength) {
msseList.add(new MantisServerSentEvent(sb.toString()));
delimiterCount = 0;
sb = new StringBuilder();
}
}
}
// We have a trailing event.
if (sb.length() > 0) {
// We had a partial delimiter match which was not in the builder.
if (delimiterCount > 0) {
for (int j = 0; j < delimiterCount; ++j) {
sb.append(delimiter.charAt(j));
}
}
msseList.add(new MantisServerSentEvent(sb.toString()));
}
return msseList;
}