@Override
	public String readLine() throws IOException {
		StringBuilder sb = null;
		while (true) {
			if (last <= next) {
				// Read buffer
				next = 0;
				last = raf.read(buffer);

				// End of file? 
				if (last < 0) return removeNewLine(sb);
			}

			// Find end of line
			int nl = findNl(next, last);
			if (sb == null) sb = new StringBuilder();
			if (nl >= 0) {
				sb.append(new String(buffer, next, nl - next));
				next = nl + 1;
				return removeNewLine(sb);
			} else {
				sb.append(new String(buffer, next, last - next));
				last = next;
			}
		}
	}