Optimize array copies

This commit is contained in:
Degubi 2019-03-02 23:49:05 +01:00 committed by Jake Wharton
parent 3c6eea6b7d
commit bac26b8e42
3 changed files with 12 additions and 21 deletions

View File

@ -27,6 +27,7 @@ import java.io.IOException;
import java.io.Reader; import java.io.Reader;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Arrays;
/** /**
* This reader walks the elements of a JsonElement as if it was coming from a * This reader walks the elements of a JsonElement as if it was coming from a
@ -282,15 +283,10 @@ public final class JsonTreeReader extends JsonReader {
private void push(Object newTop) { private void push(Object newTop) {
if (stackSize == stack.length) { if (stackSize == stack.length) {
Object[] newStack = new Object[stackSize * 2]; int newLength = stackSize * 2;
int[] newPathIndices = new int[stackSize * 2]; stack = Arrays.copyOf(stack, newLength);
String[] newPathNames = new String[stackSize * 2]; pathIndices = Arrays.copyOf(pathIndices, newLength);
System.arraycopy(stack, 0, newStack, 0, stackSize); pathNames = Arrays.copyOf(pathNames, newLength);
System.arraycopy(pathIndices, 0, newPathIndices, 0, stackSize);
System.arraycopy(pathNames, 0, newPathNames, 0, stackSize);
stack = newStack;
pathIndices = newPathIndices;
pathNames = newPathNames;
} }
stack[stackSize++] = newTop; stack[stackSize++] = newTop;
} }

View File

@ -22,6 +22,7 @@ import java.io.Closeable;
import java.io.EOFException; import java.io.EOFException;
import java.io.IOException; import java.io.IOException;
import java.io.Reader; import java.io.Reader;
import java.util.Arrays;
/** /**
* Reads a JSON (<a href="http://www.ietf.org/rfc/rfc7159.txt">RFC 7159</a>) * Reads a JSON (<a href="http://www.ietf.org/rfc/rfc7159.txt">RFC 7159</a>)
@ -1262,15 +1263,10 @@ public class JsonReader implements Closeable {
private void push(int newTop) { private void push(int newTop) {
if (stackSize == stack.length) { if (stackSize == stack.length) {
int[] newStack = new int[stackSize * 2]; int newLength = stackSize * 2;
int[] newPathIndices = new int[stackSize * 2]; stack = Arrays.copyOf(stack, newLength);
String[] newPathNames = new String[stackSize * 2]; pathIndices = Arrays.copyOf(pathIndices, newLength);
System.arraycopy(stack, 0, newStack, 0, stackSize); pathNames = Arrays.copyOf(pathNames, newLength);
System.arraycopy(pathIndices, 0, newPathIndices, 0, stackSize);
System.arraycopy(pathNames, 0, newPathNames, 0, stackSize);
stack = newStack;
pathIndices = newPathIndices;
pathNames = newPathNames;
} }
stack[stackSize++] = newTop; stack[stackSize++] = newTop;
} }

View File

@ -20,6 +20,7 @@ import java.io.Closeable;
import java.io.Flushable; import java.io.Flushable;
import java.io.IOException; import java.io.IOException;
import java.io.Writer; import java.io.Writer;
import java.util.Arrays;
import static com.google.gson.stream.JsonScope.DANGLING_NAME; import static com.google.gson.stream.JsonScope.DANGLING_NAME;
import static com.google.gson.stream.JsonScope.EMPTY_ARRAY; import static com.google.gson.stream.JsonScope.EMPTY_ARRAY;
@ -352,9 +353,7 @@ public class JsonWriter implements Closeable, Flushable {
private void push(int newTop) { private void push(int newTop) {
if (stackSize == stack.length) { if (stackSize == stack.length) {
int[] newStack = new int[stackSize * 2]; stack = Arrays.copyOf(stack, stackSize * 2);
System.arraycopy(stack, 0, newStack, 0, stackSize);
stack = newStack;
} }
stack[stackSize++] = newTop; stack[stackSize++] = newTop;
} }