Avoid local field accesses in nextString(char). This saves a modest 2%.
This commit is contained in:
parent
d01d39aa26
commit
b7c3e0067c
@ -991,40 +991,50 @@ public class JsonReader implements Closeable {
|
|||||||
* malformed.
|
* malformed.
|
||||||
*/
|
*/
|
||||||
private String nextString(char quote) throws IOException {
|
private String nextString(char quote) throws IOException {
|
||||||
|
// Like nextNonWhitespace, this uses locals 'p' and 'l' to save inner-loop field access.
|
||||||
|
char[] buffer = this.buffer;
|
||||||
StringBuilder builder = null;
|
StringBuilder builder = null;
|
||||||
do {
|
while (true) {
|
||||||
|
int p = pos;
|
||||||
|
int l = limit;
|
||||||
/* the index of the first character not yet appended to the builder. */
|
/* the index of the first character not yet appended to the builder. */
|
||||||
int start = pos;
|
int start = p;
|
||||||
while (pos < limit) {
|
while (p < l) {
|
||||||
int c = buffer[pos++];
|
int c = buffer[p++];
|
||||||
|
|
||||||
if (c == quote) {
|
if (c == quote) {
|
||||||
|
pos = p;
|
||||||
if (skipping) {
|
if (skipping) {
|
||||||
return "skipped!";
|
return "skipped!";
|
||||||
} else if (builder == null) {
|
} else if (builder == null) {
|
||||||
return stringPool.get(buffer, start, pos - start - 1);
|
return stringPool.get(buffer, start, p - start - 1);
|
||||||
} else {
|
} else {
|
||||||
builder.append(buffer, start, pos - start - 1);
|
builder.append(buffer, start, p - start - 1);
|
||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (c == '\\') {
|
} else if (c == '\\') {
|
||||||
|
pos = p;
|
||||||
if (builder == null) {
|
if (builder == null) {
|
||||||
builder = new StringBuilder();
|
builder = new StringBuilder();
|
||||||
}
|
}
|
||||||
builder.append(buffer, start, pos - start - 1);
|
builder.append(buffer, start, p - start - 1);
|
||||||
builder.append(readEscapeCharacter());
|
builder.append(readEscapeCharacter());
|
||||||
start = pos;
|
p = pos;
|
||||||
|
l = limit;
|
||||||
|
start = p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (builder == null) {
|
if (builder == null) {
|
||||||
builder = new StringBuilder();
|
builder = new StringBuilder();
|
||||||
}
|
}
|
||||||
builder.append(buffer, start, pos - start);
|
builder.append(buffer, start, p - start);
|
||||||
} while (fillBuffer(1));
|
pos = p;
|
||||||
|
if (!fillBuffer(1)) {
|
||||||
throw syntaxError("Unterminated string");
|
throw syntaxError("Unterminated string");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user