/** * Same as writeVInt(), but without checking that there is enough space for it. */ private void writeVIntUnsafe(int i) { while ((i & ~0x7F) != 0) { writeByte((byte) ((i & 0x7f) | 0x80)); i >>>= 7; } writeByteUnsafe((byte) i); }
@Override public void writeInt(int integer) { assureSize(4); // Make sure the buffer has enough space writeIntUnsafe(integer); }
@Override public void writeByte(byte b) { assureSize(1); buffer[pos++] = b; }
@Override public void writeBoolean(boolean b) { assureSize(1); writeByteUnsafe(b ? ONE : ZERO); }
/** * Writes an int in a variable-length format. Writes between one and * five bytes. Smaller values take fewer bytes. Negative numbers are not * supported. */ @Override public void writeVInt(int i) { assureSize(5); writeVIntUnsafe(i); }
/** * Writes a long in a variable-length format. Writes between one and five * bytes. Smaller values take fewer bytes. Negative numbers are not * supported. */ @Override public void writeVLong(long i) { assureSize(5); writeVLongUnsafe(i); }
@Override public void writeUTF(String string, boolean includeLength) { writeUTF(string, includeLength, false); }
/** * Same as writeVLong(), but without checking that there is enough space for it. */ private void writeVLongUnsafe(long i) { while ((i & ~0x7F) != 0) { writeByte((byte) ((i & 0x7f) | 0x80)); i >>>= 7; } writeByteUnsafe((byte) i); }
@Override public void writeLong(long value) { assureSize(8); writeIntUnsafe((int) (value >> 32)); writeIntUnsafe((int) value); }
@Override public void writeShort(int value) { assureSize(2); writeByteUnsafe((byte) (value >> 8)); writeByteUnsafe((byte) value); }
/** * Encodes a string to (unmodified) UTF-8 bytes and puts it in the buffer. */ @Override public void writeUTF(String string) { writeUTF(string, true); }
@Override public void writeBytes(byte[] bytes) { int length = bytes.length; assureSize(length); System.arraycopy(bytes, 0, buffer, pos, length); pos += length; }
/** * Reads a long stored in variable-length format. Reads between one and * nine bytes. Smaller values take fewer bytes. Negative numbers are not * supported. */ @Override public long readVLong() { byte b = readByte(); long i = b & 0x7F; for (int shift = 7; (b & 0x80) != 0; shift += 7) { b = readByte(); i |= (b & 0x7FL) << shift; } return i; }
@Override public void writeVUTF(String string) { writeUTF(string, true, true); }
/** * Reads an int stored in variable-length format. Reads between one and * five bytes. Smaller values take fewer bytes. Negative numbers are not * supported. */ @Override public int readVInt() { byte b = readByte(); int i = b & 0x7F; for (int shift = 7; (b & 0x80) != 0; shift += 7) { b = readByte(); i |= (b & 0x7F) << shift; } return i; }