X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=unused%2Fjavajs%2Futil%2FLimitedLineReader.java;fp=unused%2Fjavajs%2Futil%2FLimitedLineReader.java;h=e1d973fe583425531a61c490af7b4d4f35e23984;hb=ec8f3cedf60fb1feed6d34de6b49f6bfa78b9dd8;hp=0000000000000000000000000000000000000000;hpb=056dad85a910551cc95e44d451a61f6b8c4dd35d;p=jalview.git diff --git a/unused/javajs/util/LimitedLineReader.java b/unused/javajs/util/LimitedLineReader.java new file mode 100644 index 0000000..e1d973f --- /dev/null +++ b/unused/javajs/util/LimitedLineReader.java @@ -0,0 +1,48 @@ +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 ""; + } +} +