javajs.util.LimitedLineReader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jmol Show documentation
Show all versions of jmol Show documentation
Jmol: an open-source Java viewer for chemical structures in 3D
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 "";
}
}