From: Miguel <mic...@us...> - 2004-05-17 22:40:39
|
Update of /cvsroot/jmol/Jmol/src/org/jmol/adapter/smarter In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20814/src/org/jmol/adapter/smarter Modified Files: ModelResolver.java Log Message: Now uses LimitedLineReader to not die on CML files Index: ModelResolver.java =================================================================== RCS file: /cvsroot/jmol/Jmol/src/org/jmol/adapter/smarter/ModelResolver.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- ModelResolver.java 14 May 2004 19:21:13 -0000 1.13 +++ ModelResolver.java 17 May 2004 22:40:28 -0000 1.14 @@ -63,14 +63,10 @@ static String determineModelReader(BufferedReader bufferedReader, ModelAdapter.Logger logger) throws Exception { - bufferedReader.mark(512); String[] lines = new String[4]; - for (int i = 0; i < lines.length; ++i) { - // this is not really correct ... should probably stay null - String line = bufferedReader.readLine(); - lines[i] = line != null ? line : ""; - } - bufferedReader.reset(); + LimitedLineReader llr = new LimitedLineReader(bufferedReader, 2048); + for (int i = 0; i < lines.length; ++i) + lines[i] = llr.readLineWithNewline(); if (lines[3].length() >= 6) { String line4trimmed = lines[3].trim(); if (line4trimmed.endsWith("V2000") || @@ -163,3 +159,35 @@ final static String[] containsFormats = { "Cml", "Gaussian" }; } + +class LimitedLineReader { + int readLimit; + char[] buf; + int cchBuf; + int ichCurrent; + + LimitedLineReader(BufferedReader bufferedReader, int readLimit) + throws Exception { + this.readLimit = readLimit; + bufferedReader.mark(readLimit); + buf = new char[readLimit]; + cchBuf = bufferedReader.read(buf); + ichCurrent = 0; + bufferedReader.reset(); + } + + String readLineWithNewline() { + int ich = ichCurrent; + char ch = 0; + while (ich < cchBuf && (ch = buf[ich++]) != '\r' && ch != '\n') + ; + if (ich < cchBuf && ch == '\r' && buf[ich] == '\n') + ++ich; + int cchLine = ich - ichCurrent; + StringBuffer sb = new StringBuffer(cchLine); + sb.append(buf, ichCurrent, cchLine); + ichCurrent = ich; + String strLine = "" + sb; + return strLine; + } +} |