On 14 March 2012 17:42, <[email protected]> wrote: > Author: ebourg > Date: Wed Mar 14 17:42:28 2012 > New Revision: 1300659 > > URL: http://svn.apache.org/viewvc?rev=1300659&view=rev > Log: > Replaced CharBuffer with StringBuilder (CSV-59) > > Removed: > > commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CharBuffer.java > > commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CharBufferTest.java > Modified: > > commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java > > Modified: > commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java > URL: > http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java?rev=1300659&r1=1300658&r2=1300659&view=diff > ============================================================================== > --- > commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java > (original) > +++ > commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVParser.java > Wed Mar 14 17:42:28 2012 > @@ -235,7 +235,7 @@ class CSVLexer { > /** length of the initial token (content-)buffer */ > private static final int INITIAL_TOKEN_LENGTH = 50; > > - private final CharBuffer wsBuf = new CharBuffer(); > + private final StringBuilder wsBuf = new StringBuilder(); > > private final CSVFormat format; > > @@ -267,13 +267,13 @@ class CSVLexer { > Type type = INVALID; > > /** The content buffer. */ > - CharBuffer content = new CharBuffer(INITIAL_TOKEN_LENGTH); > + StringBuilder content = new StringBuilder(INITIAL_TOKEN_LENGTH); > > /** Token ready flag: indicates a valid token with content (ready for > the parser). */ > boolean isReady; > > Token reset() { > - content.clear(); > + content.setLength(0); > type = INVALID; > isReady = false; > return this; > @@ -299,7 +299,7 @@ class CSVLexer { > * @throws IOException on stream access error > */ > Token nextToken(Token tkn) throws IOException { > - wsBuf.clear(); // reuse > + wsBuf.setLength(0); // reuse > > // get the last read char (required for empty line detection) > int lastChar = in.readAgain(); > @@ -308,7 +308,6 @@ class CSVLexer { > /* note: unfortunately isEndOfLine may consumes a character silently. > * this has no effect outside of the method. so a simple > workaround > * is to call 'readAgain' on the stream... > - * uh: might using objects instead of base-types (jdk1.5 > autoboxing!) > */ > int c = in.read(); > boolean eol = isEndOfLine(c); > @@ -427,12 +426,17 @@ class CSVLexer { > } > > if (format.isTrailingSpacesIgnored()) { > - tkn.content.trimTrailingWhitespace(); > + trimTrailingSpaces(tkn.content); > } > > return tkn; > } > > + private void trimTrailingSpaces(StringBuilder buffer) { > + while (buffer.length() > 0 && > Character.isWhitespace(buffer.charAt(buffer.length() - 1))) { > + buffer.setLength(buffer.length() - 1); > + }
The setLength() method is expensive, so should be taken out of the loop. > + } > > /** > * An encapsulated token lexer > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
