in src/main/java/org/apache/sling/commons/log/logback/internal/Tailer.java [107:143]
private void readLines(RandomAccessFile file, long startPos) throws IOException {
StringBuilder sb = new StringBuilder();
file.seek(startPos);
int num;
boolean seenCR = false;
while (((num = file.read(buffer)) != -1)) {
for (int i = 0; i < num; i++) {
byte ch = buffer[i];
switch (ch) {
case '\n':
seenCR = false; // swallow CR before LF
listener.handle(sb.toString());
sb.setLength(0);
break;
case '\r':
if (seenCR) {
sb.append('\r');
}
seenCR = true;
break;
default:
if (seenCR) {
seenCR = false; // swallow final CR
listener.handle(sb.toString());
sb.setLength(0);
}
sb.append((char) ch); // add character, not its ascii value
}
}
}
// Drain the left over part
if (sb.length() != 0) {
listener.handle(sb.toString());
}
}