8339196: Optimize BufWriterImpl#writeU1/U2/Int/Long
Reviewed-by: liach, redestad
This commit is contained in:
parent
f2968b34a5
commit
b711c41d44
@ -91,17 +91,30 @@ public final class BufWriterImpl implements BufWriter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeU1(int x) {
|
public void writeU1(int x) {
|
||||||
writeIntBytes(1, x);
|
reserveSpace(1);
|
||||||
|
elems[offset++] = (byte) x;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeU2(int x) {
|
public void writeU2(int x) {
|
||||||
writeIntBytes(2, x);
|
reserveSpace(2);
|
||||||
|
byte[] elems = this.elems;
|
||||||
|
int offset = this.offset;
|
||||||
|
elems[offset ] = (byte) (x >> 8);
|
||||||
|
elems[offset + 1] = (byte) x;
|
||||||
|
this.offset = offset + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeInt(int x) {
|
public void writeInt(int x) {
|
||||||
writeIntBytes(4, x);
|
reserveSpace(4);
|
||||||
|
byte[] elems = this.elems;
|
||||||
|
int offset = this.offset;
|
||||||
|
elems[offset ] = (byte) (x >> 24);
|
||||||
|
elems[offset + 1] = (byte) (x >> 16);
|
||||||
|
elems[offset + 2] = (byte) (x >> 8);
|
||||||
|
elems[offset + 3] = (byte) x;
|
||||||
|
this.offset = offset + 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -111,7 +124,18 @@ public final class BufWriterImpl implements BufWriter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeLong(long x) {
|
public void writeLong(long x) {
|
||||||
writeIntBytes(8, x);
|
reserveSpace(8);
|
||||||
|
byte[] elems = this.elems;
|
||||||
|
int offset = this.offset;
|
||||||
|
elems[offset ] = (byte) (x >> 56);
|
||||||
|
elems[offset + 1] = (byte) (x >> 48);
|
||||||
|
elems[offset + 2] = (byte) (x >> 40);
|
||||||
|
elems[offset + 3] = (byte) (x >> 32);
|
||||||
|
elems[offset + 4] = (byte) (x >> 24);
|
||||||
|
elems[offset + 5] = (byte) (x >> 16);
|
||||||
|
elems[offset + 6] = (byte) (x >> 8);
|
||||||
|
elems[offset + 7] = (byte) x;
|
||||||
|
this.offset = offset + 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -153,15 +177,20 @@ public final class BufWriterImpl implements BufWriter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reserveSpace(int freeBytes) {
|
public void reserveSpace(int freeBytes) {
|
||||||
if (offset + freeBytes > elems.length) {
|
int minCapacity = offset + freeBytes;
|
||||||
int newsize = elems.length * 2;
|
if (minCapacity > elems.length) {
|
||||||
while (offset + freeBytes > newsize) {
|
grow(minCapacity);
|
||||||
newsize *= 2;
|
|
||||||
}
|
|
||||||
elems = Arrays.copyOf(elems, newsize);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void grow(int minCapacity) {
|
||||||
|
int newsize = elems.length * 2;
|
||||||
|
while (minCapacity > newsize) {
|
||||||
|
newsize *= 2;
|
||||||
|
}
|
||||||
|
elems = Arrays.copyOf(elems, newsize);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int size() {
|
public int size() {
|
||||||
return offset;
|
return offset;
|
||||||
|
Loading…
Reference in New Issue
Block a user