public class StringEncoding
UTF-8 encodes Strings in such a way that NULL < "" < Character.MIN_CODE_POINT < aa < aaa < b< ba<...<
Character.MAX_CODE_POINT < ..., and does not use 0x00 (reserved for separators).
Note that UTF-8 encoding is already lexicographically sorted in bytes, by design. Hence, all we
really have to do is remove 0x00 elements. Since UTF-8 never uses the values 0xff or 0xfe, so adding
2 to every byte will suffice.
To distinguish between empty strings and null, we use 0x01 to denote an empty string, but an empty byte