From 5848096f3e1f36c038f522a3d7d6b9e3b553cf8e Mon Sep 17 00:00:00 2001 From: sourabh gupta Date: Thu, 25 May 2017 04:19:09 +0530 Subject: [PATCH] Size allocation of StringBuilder (#1047) Size allocation of StringBuilder --- .../java/com/google/gson/stream/JsonReader.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/gson/src/main/java/com/google/gson/stream/JsonReader.java b/gson/src/main/java/com/google/gson/stream/JsonReader.java index 0a10edce..e0799d73 100644 --- a/gson/src/main/java/com/google/gson/stream/JsonReader.java +++ b/gson/src/main/java/com/google/gson/stream/JsonReader.java @@ -1077,7 +1077,7 @@ public class JsonReader implements Closeable { // use a StringBuilder when the value is too long. This is too long to be a number! if (builder == null) { - builder = new StringBuilder(); + builder = new StringBuilder(Math.max(i,16)); } builder.append(buffer, pos, i); pos += i; @@ -1086,14 +1086,8 @@ public class JsonReader implements Closeable { break; } } - - String result; - if (builder == null) { - result = new String(buffer, pos, i); - } else { - builder.append(buffer, pos, i); - result = builder.toString(); - } + + String result = (null == builder) ? new String(buffer, pos, i) : builder.append(buffer, pos, i).toString(); pos += i; return result; } @@ -1438,14 +1432,15 @@ public class JsonReader implements Closeable { * @param toFind a string to search for. Must not contain a newline. */ private boolean skipTo(String toFind) throws IOException { + int length = toFind.length(); outer: - for (; pos + toFind.length() <= limit || fillBuffer(toFind.length()); pos++) { + for (; pos + length <= limit || fillBuffer(length); pos++) { if (buffer[pos] == '\n') { lineNumber++; lineStart = pos + 1; continue; } - for (int c = 0; c < toFind.length(); c++) { + for (int c = 0; c < length; c++) { if (buffer[pos + c] != toFind.charAt(c)) { continue outer; }