This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-csv.git
The following commit(s) were added to refs/heads/master by this push:
new 138a0b5f CSVPrinter now uses an internal lock instead of synchronized
methods
138a0b5f is described below
commit 138a0b5fc57f53004b48532bed3086408bd02932
Author: Gary Gregory <[email protected]>
AuthorDate: Wed May 7 07:34:35 2025 -0400
CSVPrinter now uses an internal lock instead of synchronized methods
---
.../java/org/apache/commons/csv/CSVPrinter.java | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/src/main/java/org/apache/commons/csv/CSVPrinter.java
b/src/main/java/org/apache/commons/csv/CSVPrinter.java
index dd1df081..e7f6dab5 100644
--- a/src/main/java/org/apache/commons/csv/CSVPrinter.java
+++ b/src/main/java/org/apache/commons/csv/CSVPrinter.java
@@ -204,13 +204,25 @@ public final class CSVPrinter implements Flushable,
Closeable {
public void print(final Object value) throws IOException {
lock.lock();
try {
- format.print(value, appendable, newRecord);
- newRecord = false;
+ printRaw(value);
} finally {
lock.unlock();
}
}
+ /**
+ * Prints the string as the next value on the line. The value will be
escaped or encapsulated as needed.
+ *
+ * @param value
+ * value to be output.
+ * @throws IOException
+ * If an I/O error occurs
+ */
+ private void printRaw(final Object value) throws IOException {
+ format.print(value, appendable, newRecord);
+ newRecord = false;
+ }
+
/**
* Prints a comment on a new line among the delimiter-separated values.
*
@@ -352,17 +364,17 @@ public final class CSVPrinter implements Flushable,
Closeable {
* separator to the output after printing the record, so there is no need
to call {@link #println()}.
* </p>
*
- * @param values
+ * @param stream
* values to output.
* @throws IOException
* If an I/O error occurs
* @since 1.10.0
*/
@SuppressWarnings("resource") // caller closes.
- public void printRecord(final Stream<?> values) throws IOException {
+ public void printRecord(final Stream<?> stream) throws IOException {
lock.lock();
try {
- IOStream.adapt(values).forEachOrdered(this::print);
+ IOStream.adapt(stream).forEachOrdered(stream.isParallel() ?
this::printRaw : this::print);
endOfRecord();
} finally {
lock.unlock();