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-vfs.git
The following commit(s) were added to refs/heads/master by this push:
new 140226afd Improve performance of encoding Uris (#660)
140226afd is described below
commit 140226afdf42f1d538c12896e1ea01b1a0858897
Author: Anthony Goubard <[email protected]>
AuthorDate: Mon Mar 24 14:39:59 2025 +0100
Improve performance of encoding Uris (#660)
* Improved performance of UriParser.normalisePath
* Improved performance of UriParser.extractScheme
* Improved performance of UriParser.encode
* Improved performance of UriParser.encode
Make tests compile and uncommented optimisation
* Fix CRLF to LF
---
.../src/main/java/org/apache/commons/vfs2/provider/UriParser.java | 3 +++
.../java/org/apache/commons/vfs2/provider/UriParserBenchmark.java | 7 +++++++
2 files changed, 10 insertions(+)
diff --git
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/UriParser.java
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/UriParser.java
index 757c0990d..273c9c083 100644
--- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/UriParser.java
+++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/UriParser.java
@@ -217,6 +217,9 @@ public final class UriParser {
}
final StringBuilder buffer = new StringBuilder(decodedStr);
encode(buffer, 0, buffer.length(), reserved);
+ if (buffer.length() == decodedStr.length()) { // No encoding happened
+ return decodedStr;
+ }
return buffer.toString();
}
diff --git
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java
index 712ef209a..5d9db482f 100644
---
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java
+++
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java
@@ -29,6 +29,8 @@ import org.openjdk.jmh.annotations.Warmup;
public class UriParserBenchmark {
private static final String PATH_TO_NORMALIZE =
"file:///this/../is/a%2flong%2Fpath/./for testing/normlisePath%2fmethod.txt";
+ private static final String PATH_TO_ENCODE =
"file:///this/is/path/to/encode/for/testing/encode.perf";
+ private static final char[] ENCODE_RESERVED = new char[] {' ', '#'};
@Benchmark
public void normalisePath() throws FileSystemException {
@@ -36,4 +38,9 @@ public class UriParserBenchmark {
UriParser.fixSeparators(path);
UriParser.normalisePath(path);
}
+
+ @Benchmark
+ public void encode() throws FileSystemException {
+ UriParser.encode(PATH_TO_ENCODE, ENCODE_RESERVED);
+ }
}