private void readLines()

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());
        }
    }