in tablestore/src/main/java/com/alicloud/openservices/tablestore/core/protocol/PlainBufferCodedOutputStream.java [85:127]
public void writeCellValue(ColumnValue value) throws IOException {
writeTag(TAG_CELL_VALUE);
switch (value.getType()) {
case STRING: {
byte[] rawData = value.asStringInBytes();
final int prefixLength = PlainBufferOutputStream.LITTLE_ENDIAN_32_SIZE + 1; // length + type
output.writeRawLittleEndian32(prefixLength + rawData.length); // length + type + value
output.writeRawByte(VT_STRING);
output.writeRawLittleEndian32(rawData.length);
output.writeBytes(rawData);
break;
}
case INTEGER: {
output.writeRawLittleEndian32(1 + PlainBufferOutputStream.LITTLE_ENDIAN_64_SIZE);
output.writeRawByte(VT_INTEGER);
output.writeRawLittleEndian64(value.asLong());
break;
}
case BINARY: {
byte[] rawData = value.asBinary();
final int prefixLength = PlainBufferOutputStream.LITTLE_ENDIAN_32_SIZE + 1; // length + type
output.writeRawLittleEndian32(prefixLength + rawData.length); // length + type
output.writeRawByte(VT_BLOB);
output.writeRawLittleEndian32(rawData.length);
output.writeBytes(rawData);
break;
}
case DOUBLE: {
output.writeRawLittleEndian32(1 + PlainBufferOutputStream.LITTLE_ENDIAN_64_SIZE);
output.writeRawByte(VT_DOUBLE);
output.writeDouble(value.asDouble());
break;
}
case BOOLEAN: {
output.writeRawLittleEndian32(2);
output.writeRawByte(VT_BOOLEAN);
output.writeBoolean(value.asBoolean());
break;
}
default:
throw new IOException("Bug: unsupported column type: " + value.getType());
}
}