I used BinaryWriter.Write() to write string, the msdn said when writing the string, it is said like this
Writes a length-prefixed string to this stream in the current encoding of the BinaryWriter, and advances the current position of the stream in accordance with the encoding used and the specific characters being written to the stream.
I thought the length-prefix's size if fixed, but in fact it is varied.
who knows the details of how this method calculate the prefix's length.