--- /dev/null
+package javajs.util;
+
+import java.io.BufferedReader;
+
+/**
+ * A simple class to read a designated number of bytes from a
+ * file and then return them line by line, skipping lines that
+ * start with #, and including the \n or \r characters at line ends.
+ *
+ * Generally useful for determining what sort of data a file contains.
+ *
+ */
+public class LimitedLineReader {
+ private char[] buf;
+ private int cchBuf;
+ private int ichCurrent;
+
+ public LimitedLineReader(BufferedReader bufferedReader, int readLimit)
+ throws Exception {
+ bufferedReader.mark(readLimit + 1);
+ buf = new char[readLimit];
+ cchBuf = Math.max(bufferedReader.read(buf, 0, readLimit), 0);
+ ichCurrent = 0;
+ bufferedReader.reset();
+ }
+
+ public String getHeader(int n) {
+ return (n == 0 ? new String(buf) : new String(buf, 0, Math.min(cchBuf, n)));
+ }
+
+ public String readLineWithNewline() {
+ while (ichCurrent < cchBuf) {
+ int ichBeginningOfLine = ichCurrent;
+ char ch = 0;
+ while (ichCurrent < cchBuf &&
+ (ch = buf[ichCurrent++]) != '\r' && ch != '\n') {
+ }
+ if (ch == '\r' && ichCurrent < cchBuf && buf[ichCurrent] == '\n')
+ ++ichCurrent;
+ int cchLine = ichCurrent - ichBeginningOfLine;
+ if (buf[ichBeginningOfLine] == '#')
+ continue; // flush comment lines;
+ return new String(buf, ichBeginningOfLine, cchLine);
+ }
+ return "";
+ }
+}
+