in statefun-sdk-java/src/main/java/org/apache/flink/statefun/sdk/java/types/Types.java [236:264]
private static String deserializeStringWrapperCompatibleString(Slice input) {
if (input.readableBytes() == 0) {
return "";
}
ByteString buf = SliceProtobufUtil.asByteString(input);
int position = 0;
// read field tag
if (buf.byteAt(position++) != STRING_WRAPPER_FIELD_TYPE) {
throw new IllegalStateException("Not a StringWrapper");
}
// read VarInt32 length
int shift = 0;
long varIntSize = 0;
while (shift < 32) {
final byte b = buf.byteAt(position++);
varIntSize |= (long) (b & 0x7F) << shift;
if ((b & 0x80) == 0) {
break;
}
shift += 7;
}
// sanity checks
if (varIntSize < 0 || varIntSize > Integer.MAX_VALUE) {
throw new IllegalStateException("Malformed VarInt");
}
final int endIndex = position + (int) varIntSize;
ByteString utf8Bytes = buf.substring(position, endIndex);
return utf8Bytes.toStringUtf8();
}