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]

Reply via email to