diff --git a/src/main/java/org/apache/commons/csv/CSVParser.java b/src/main/java/org/apache/commons/csv/CSVParser.java
index a6ec72c2..ee299718 100644
--- a/src/main/java/org/apache/commons/csv/CSVParser.java
+++ b/src/main/java/org/apache/commons/csv/CSVParser.java
@@ -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);
+ }
+ }
/**
* An encapsulated token lexer
diff --git a/src/main/java/org/apache/commons/csv/CharBuffer.java b/src/main/java/org/apache/commons/csv/CharBuffer.java
deleted file mode 100644
index 1c5ad8d6..00000000
--- a/src/main/java/org/apache/commons/csv/CharBuffer.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.commons.csv;
-
-/**
- * A simple StringBuffer replacement that aims to reduce copying as much as possible.
- * The buffer grows as necessary. This class is not thread safe.
- *
- * @author Ortwin Glück
- */
-class CharBuffer {
-
- private char[] c;
-
- /**
- * Actually used number of characters in the array.
- * It is also the index at which a new character will be inserted into c
.
- */
- private int length;
-
- /**
- * Creates a new CharBuffer with an initial capacity of 32 characters.
- */
- CharBuffer() {
- this(32);
- }
-
- /**
- * Creates a new CharBuffer with an initial capacity
- * of length
characters.
- */
- CharBuffer(int length) {
- if (length == 0) {
- throw new IllegalArgumentException("Can't create an empty CharBuffer");
- }
- this.c = new char[length];
- }
-
- /**
- * Empties the buffer. The capacity still remains the same, so no memory is freed.
- */
- void clear() {
- length = 0;
- }
-
- /**
- * Returns the number of characters in the buffer.
- *
- * @return the number of characters
- */
- int length() {
- return length;
- }
-
- /**
- * Returns the current capacity of the buffer.
- *
- * @return the maximum number of characters that can be stored in this buffer without resizing it.
- */
- int capacity() {
- return c.length;
- }
-
-
- /**
- * Appends the contents of cb
to the end of this CharBuffer.
- *
- * @param cb the CharBuffer to append or null
- */
- void append(CharBuffer cb) {
- if (cb != null) {
- ensureCapacity(length + cb.length);
- System.arraycopy(cb.c, 0, c, length, cb.length);
- length += cb.length;
- }
- }
-
- /**
- * Appends s
to the end of this CharBuffer.
- * This method involves copying the new data once!
- *
- * @param s the String to append or null
- */
- void append(String s) {
- if (s != null) {
- append(s.toCharArray());
- }
- }
-
- /**
- * Appends data
to the end of this CharBuffer.
- * This method involves copying the new data once!
- *
- * @param data the char[] to append or null
- */
- void append(char[] data) {
- if (data != null) {
- ensureCapacity(length + data.length);
- System.arraycopy(data, 0, c, length, data.length);
- length += data.length;
- }
- }
-
- /**
- * Appends a single character to the end of this CharBuffer.
- * This method involves copying the new data once!
- *
- * @param data the char to append
- */
- void append(char data) {
- ensureCapacity(length + 1);
- c[length] = data;
- length++;
- }
-
- /**
- * Removes trailing whitespace.
- */
- void trimTrailingWhitespace() {
- while (length > 0 && Character.isWhitespace(c[length - 1])) {
- length--;
- }
- }
-
- /**
- * Converts the contents of the buffer into a StringBuffer.
- * This method involves copying the new data once!
- *
- * @return the contents of the character buffer as a String
- */
- @Override
- public String toString() {
- return new String(c, 0, length);
- }
-
- /**
- * Copies the data into a new array of at least capacity
size.
- *
- * @param capacity
- */
- void ensureCapacity(int capacity) {
- if (c.length < capacity) {
- int newcapacity = ((capacity * 3) >> 1) + 1;
- char[] newc = new char[newcapacity];
- System.arraycopy(c, 0, newc, 0, length);
- c = newc;
- }
- }
-}
diff --git a/src/test/java/org/apache/commons/csv/CharBufferTest.java b/src/test/java/org/apache/commons/csv/CharBufferTest.java
deleted file mode 100644
index 7dd9bc1d..00000000
--- a/src/test/java/org/apache/commons/csv/CharBufferTest.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.commons.csv;
-
-import junit.framework.TestCase;
-
-/**
- * @author Ortwin Glück
- */
-public class CharBufferTest extends TestCase {
- public void testCreate() {
- CharBuffer cb = new CharBuffer();
- assertEquals(0, cb.length());
- try {
- cb = new CharBuffer(0);
- fail("Should not be possible");
- } catch (IllegalArgumentException e) {
- // expected
- }
-
- cb = new CharBuffer(128);
- assertEquals(0, cb.length());
- }
-
- public void testAppendChar() {
- CharBuffer cb = new CharBuffer(1);
- String expected = "";
- for (char c = 'a'; c < 'z'; c++) {
- cb.append(c);
- expected += c;
- assertEquals(expected, cb.toString());
- assertEquals(expected.length(), cb.length());
- }
- }
-
- public void testAppendCharArray() {
- CharBuffer cb = new CharBuffer(1);
- char[] abcd = "abcd".toCharArray();
- String expected = "";
- for (int i = 0; i < 10; i++) {
- cb.append(abcd);
- expected += "abcd";
- assertEquals(expected, cb.toString());
- assertEquals(4 * (i + 1), cb.length());
- }
- }
-
- public void testAppendString() {
- CharBuffer cb = new CharBuffer(1);
- String abcd = "abcd";
- String expected = "";
- for (int i = 0; i < 10; i++) {
- cb.append(abcd);
- expected += abcd;
- assertEquals(expected, cb.toString());
- assertEquals(4 * (i + 1), cb.length());
- }
- }
-
- public void testAppendCharBuffer() {
- CharBuffer cb = new CharBuffer(1);
- CharBuffer abcd = new CharBuffer(17);
- abcd.append("abcd");
- String expected = "";
- for (int i = 0; i < 10; i++) {
- cb.append(abcd);
- expected += "abcd";
- assertEquals(expected, cb.toString());
- assertEquals(4 * (i + 1), cb.length());
- }
- }
-
- //-- the following test cases have been adapted from the HttpComponents project
- //-- written by Oleg Kalnichevski
-
- public void testSimpleAppend() throws Exception {
- CharBuffer buffer = new CharBuffer(16);
- assertEquals(16, buffer.capacity());
- assertEquals(0, buffer.length());
- char[] b1 = buffer.toString().toCharArray();
- assertNotNull(b1);
- assertEquals(0, b1.length);
- assertEquals(0, buffer.length());
-
- char[] tmp = new char[]{'1', '2', '3', '4'};
- buffer.append(tmp);
- assertEquals(16, buffer.capacity());
- assertEquals(4, buffer.length());
-
- char[] b2 = buffer.toString().toCharArray();
- assertNotNull(b2);
- assertEquals(4, b2.length);
- for (int i = 0; i < tmp.length; i++) {
- assertEquals(tmp[i], b2[i]);
- }
- assertEquals("1234", buffer.toString());
-
- buffer.clear();
- assertEquals(16, buffer.capacity());
- assertEquals(0, buffer.length());
- }
-
- public void testAppendString2() throws Exception {
- CharBuffer buffer = new CharBuffer(8);
- buffer.append("stuff");
- buffer.append(" and more stuff");
- assertEquals("stuff and more stuff", buffer.toString());
- }
-
- public void testAppendNull() throws Exception {
- CharBuffer buffer = new CharBuffer(8);
-
- buffer.append((String) null);
- assertEquals("", buffer.toString());
-
- buffer.append((CharBuffer) null);
- assertEquals("", buffer.toString());
-
- buffer.append((char[]) null);
- assertEquals("", buffer.toString());
- }
-
- public void testAppendCharArrayBuffer() throws Exception {
- CharBuffer buffer1 = new CharBuffer(8);
- buffer1.append(" and more stuff");
- CharBuffer buffer2 = new CharBuffer(8);
- buffer2.append("stuff");
- buffer2.append(buffer1);
- assertEquals("stuff and more stuff", buffer2.toString());
- }
-
- public void testAppendSingleChar() throws Exception {
- CharBuffer buffer = new CharBuffer(4);
- buffer.append('1');
- buffer.append('2');
- buffer.append('3');
- buffer.append('4');
- buffer.append('5');
- buffer.append('6');
- assertEquals("123456", buffer.toString());
- }
-
- public void testProvideCapacity() throws Exception {
- CharBuffer buffer = new CharBuffer(4);
- buffer.ensureCapacity(2);
- assertEquals(4, buffer.capacity());
- buffer.ensureCapacity(8);
- assertTrue(buffer.capacity() >= 8);
- }
-
- public void testTrim() throws Exception {
- CharBuffer buffer = new CharBuffer();
- buffer.append(" ");
- buffer.trimTrailingWhitespace();
- assertEquals(0, buffer.length());
-
- buffer = new CharBuffer();
- buffer.append("Hello World! ");
- buffer.trimTrailingWhitespace();
- assertEquals("Hello World!", buffer.toString());
- }
-}