8077242: (str) Optimize AbstractStringBuilder.append(CharSequence, int, int) for String argument
Reviewed-by: martin
This commit is contained in:
parent
3fac3ec9da
commit
0e510a1f61
jdk/src/java.base
share/classes
com/sun/java/util/jar/pack
java
io
lang
net
text
sun
invoke/util
net/www
text/normalizer
util
unix/classes/java/io
windows/classes/java/io
@ -1235,7 +1235,7 @@ class Attribute implements Comparable<Attribute> {
|
||||
int sofar = 0; // how far have we processed the layout?
|
||||
for (;;) {
|
||||
// for each dash, collect everything up to the dash
|
||||
result.append(layout.substring(sofar, dash));
|
||||
result.append(layout, sofar, dash);
|
||||
sofar = dash+1; // skip the dash
|
||||
// then collect intermediate values
|
||||
int value0 = parseIntBefore(layout, dash);
|
||||
@ -1249,7 +1249,7 @@ class Attribute implements Comparable<Attribute> {
|
||||
dash = findCaseDash(layout, sofar);
|
||||
if (dash < 0) break;
|
||||
}
|
||||
result.append(layout.substring(sofar)); // collect the rest
|
||||
result.append(layout, sofar, layout.length()); // collect the rest
|
||||
return result.toString();
|
||||
}
|
||||
static {
|
||||
|
@ -109,7 +109,7 @@ public class StringWriter extends Writer {
|
||||
* @param len Number of characters to write
|
||||
*/
|
||||
public void write(String str, int off, int len) {
|
||||
buf.append(str.substring(off, off + len));
|
||||
buf.append(str, off, off + len);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -515,8 +515,12 @@ abstract class AbstractStringBuilder implements Appendable, CharSequence {
|
||||
+ s.length());
|
||||
int len = end - start;
|
||||
ensureCapacityInternal(count + len);
|
||||
for (int i = start, j = count; i < end; i++, j++)
|
||||
value[j] = s.charAt(i);
|
||||
if (s instanceof String) {
|
||||
((String)s).getChars(start, end, value, count);
|
||||
} else {
|
||||
for (int i = start, j = count; i < end; i++, j++)
|
||||
value[j] = s.charAt(i);
|
||||
}
|
||||
count += len;
|
||||
return this;
|
||||
}
|
||||
|
@ -2018,7 +2018,7 @@ public final class URI
|
||||
StringBuilder sb = new StringBuilder(base.length() + cn);
|
||||
// 5.2 (6a)
|
||||
if (i >= 0)
|
||||
sb.append(base.substring(0, i + 1));
|
||||
sb.append(base, 0, i + 1);
|
||||
// 5.2 (6b)
|
||||
sb.append(child);
|
||||
path = sb.toString();
|
||||
@ -2686,7 +2686,7 @@ public final class URI
|
||||
if (!match(c, lowMask, highMask)) {
|
||||
if (sb == null) {
|
||||
sb = new StringBuffer();
|
||||
sb.append(s.substring(0, i));
|
||||
sb.append(s, 0, i);
|
||||
}
|
||||
appendEscape(sb, (byte)c);
|
||||
} else {
|
||||
@ -2698,7 +2698,7 @@ public final class URI
|
||||
|| Character.isISOControl(c))) {
|
||||
if (sb == null) {
|
||||
sb = new StringBuffer();
|
||||
sb.append(s.substring(0, i));
|
||||
sb.append(s, 0, i);
|
||||
}
|
||||
appendEncoded(sb, c);
|
||||
} else {
|
||||
|
@ -329,8 +329,8 @@ final class MergeCollation {
|
||||
PatternEntry e = patterns.get(i);
|
||||
if (e.chars.regionMatches(0,entry.chars,0,
|
||||
e.chars.length())) {
|
||||
excessChars.append(entry.chars.substring(e.chars.length(),
|
||||
entry.chars.length()));
|
||||
excessChars.append(entry.chars, e.chars.length(),
|
||||
entry.chars.length());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1239,7 +1239,7 @@ public class MessageFormat extends Format {
|
||||
int lastOffset = 0;
|
||||
int last = result.length();
|
||||
for (int i = 0; i <= maxOffset; ++i) {
|
||||
result.append(pattern.substring(lastOffset, offsets[i]));
|
||||
result.append(pattern, lastOffset, offsets[i]);
|
||||
lastOffset = offsets[i];
|
||||
int argumentNumber = argumentNumbers[i];
|
||||
if (arguments == null || argumentNumber >= arguments.length) {
|
||||
@ -1332,7 +1332,7 @@ public class MessageFormat extends Format {
|
||||
}
|
||||
}
|
||||
}
|
||||
result.append(pattern.substring(lastOffset, pattern.length()));
|
||||
result.append(pattern, lastOffset, pattern.length());
|
||||
if (characterIterators != null && last != result.length()) {
|
||||
characterIterators.add(createAttributedCharacterIterator(
|
||||
result.substring(last)));
|
||||
|
@ -511,7 +511,7 @@ public class BytecodeName {
|
||||
if (s.charAt(0) != ESCAPE_C && i > 0)
|
||||
sb.append(NULL_ESCAPE);
|
||||
// append the string so far, which is unremarkable:
|
||||
sb.append(s.substring(0, i));
|
||||
sb.append(s, 0, i);
|
||||
}
|
||||
|
||||
// rewrite \ to \-, / to \|, etc.
|
||||
@ -544,7 +544,7 @@ public class BytecodeName {
|
||||
if (sb == null) {
|
||||
sb = new StringBuilder(s.length());
|
||||
// append the string so far, which is unremarkable:
|
||||
sb.append(s.substring(stringStart, i));
|
||||
sb.append(s, stringStart, i);
|
||||
}
|
||||
++i; // skip both characters
|
||||
c = oc;
|
||||
|
@ -451,7 +451,7 @@ public class ParseUtil {
|
||||
if (!match(c, lowMask, highMask) && !isEscaped(s, i)) {
|
||||
if (sb == null) {
|
||||
sb = new StringBuffer();
|
||||
sb.append(s.substring(0, i));
|
||||
sb.append(s, 0, i);
|
||||
}
|
||||
appendEscape(sb, (byte)c);
|
||||
} else {
|
||||
@ -463,7 +463,7 @@ public class ParseUtil {
|
||||
|| Character.isISOControl(c))) {
|
||||
if (sb == null) {
|
||||
sb = new StringBuffer();
|
||||
sb.append(s.substring(0, i));
|
||||
sb.append(s, 0, i);
|
||||
}
|
||||
appendEncoded(sb, c);
|
||||
} else {
|
||||
|
@ -1850,7 +1850,7 @@ public class UnicodeSet implements UnicodeMatcher {
|
||||
syntaxError(chars, "Invalid property pattern");
|
||||
}
|
||||
chars.jumpahead(pos.getIndex());
|
||||
rebuiltPat.append(patStr.substring(0, pos.getIndex()));
|
||||
rebuiltPat.append(patStr, 0, pos.getIndex());
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------
|
||||
|
@ -242,12 +242,13 @@ public class BuddhistCalendar extends GregorianCalendar {
|
||||
return s;
|
||||
}
|
||||
p += yearField.length();
|
||||
StringBuilder sb = new StringBuilder(s.substring(0, p));
|
||||
StringBuilder sb = new StringBuilder(s.length() + 10);
|
||||
sb.append(s, 0, p);
|
||||
// Skip the year number
|
||||
while (Character.isDigit(s.charAt(p++)))
|
||||
;
|
||||
int year = internalGet(YEAR) + BUDDHIST_YEAR_OFFSET;
|
||||
sb.append(year).append(s.substring(p - 1));
|
||||
sb.append(year).append(s, p - 1, s.length());
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
@ -65,8 +65,8 @@ class UnixFileSystem extends FileSystem {
|
||||
int n = len;
|
||||
while ((n > 0) && (pathname.charAt(n - 1) == '/')) n--;
|
||||
if (n == 0) return "/";
|
||||
StringBuffer sb = new StringBuffer(pathname.length());
|
||||
if (off > 0) sb.append(pathname.substring(0, off));
|
||||
StringBuilder sb = new StringBuilder(pathname.length());
|
||||
if (off > 0) sb.append(pathname, 0, off);
|
||||
char prevChar = 0;
|
||||
for (int i = off; i < n; i++) {
|
||||
char c = pathname.charAt(i);
|
||||
|
@ -104,7 +104,7 @@ class WinNTFileSystem extends FileSystem {
|
||||
if (off < 3) off = 0; /* Avoid fencepost cases with UNC pathnames */
|
||||
int src;
|
||||
char slash = this.slash;
|
||||
StringBuffer sb = new StringBuffer(len);
|
||||
StringBuilder sb = new StringBuilder(len);
|
||||
|
||||
if (off == 0) {
|
||||
/* Complete normalization, including prefix */
|
||||
@ -112,7 +112,7 @@ class WinNTFileSystem extends FileSystem {
|
||||
} else {
|
||||
/* Partial normalization */
|
||||
src = off;
|
||||
sb.append(path.substring(0, off));
|
||||
sb.append(path, 0, off);
|
||||
}
|
||||
|
||||
/* Remove redundant slashes from the remainder of the path, forcing all
|
||||
@ -156,8 +156,7 @@ class WinNTFileSystem extends FileSystem {
|
||||
}
|
||||
}
|
||||
|
||||
String rv = sb.toString();
|
||||
return rv;
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
/* A normal Win32 pathname contains no duplicate slashes, except possibly
|
||||
@ -172,7 +171,7 @@ class WinNTFileSystem extends FileSystem {
|
||||
else directory-relative (has form "z:foo")
|
||||
3 absolute local pathname (begins with "z:\\")
|
||||
*/
|
||||
private int normalizePrefix(String path, int len, StringBuffer sb) {
|
||||
private int normalizePrefix(String path, int len, StringBuilder sb) {
|
||||
int src = 0;
|
||||
while ((src < len) && isSlash(path.charAt(src))) src++;
|
||||
char c;
|
||||
|
Loading…
x
Reference in New Issue
Block a user