MIME4J-306 MimeUtil::unfold should group char appends (#52)
Calling repeatedly append requires ensuring the capacity amongst other.
Appends to the string builder can be done for all previous chars when a line delimiter is encountered, thus reducing the cost of the operation.
Gain: 66%
diff --git a/core/src/main/java/org/apache/james/mime4j/util/MimeUtil.java b/core/src/main/java/org/apache/james/mime4j/util/MimeUtil.java
index fb07272..7241e1b 100644
--- a/core/src/main/java/org/apache/james/mime4j/util/MimeUtil.java
+++ b/core/src/main/java/org/apache/james/mime4j/util/MimeUtil.java
@@ -263,12 +263,19 @@
sb.append(s, 0, crlfIdx);
}
+ int lastLineBreak = crlfIdx;
for (int idx = crlfIdx + 1; idx < length; idx++) {
char c = s.charAt(idx);
- if (c != '\r' && c != '\n') {
- sb.append(c);
+ if (c == '\r' || c == '\n') {
+ if (idx > lastLineBreak + 1) {
+ sb.append(s, lastLineBreak + 1, idx);
+ }
+ lastLineBreak = idx;
}
}
+ if (lastLineBreak < s.length() - 1 && s.length() > 0) {
+ sb.append(s, lastLineBreak + 1, s.length());
+ }
return sb.toString();
}