В документации для BinaryWriter.Write(string)
указано, что в этот поток записывается строка с префиксом длины. Перегрузка для Write(char[])
не имеет такого префикса.
Мне кажется, что дополнительные данные - это длина.
EDIT:
Просто для большей ясности используйте Reflector. Вы увидите, что в нем есть этот фрагмент кода как часть Write(string)
метода:
this.Write7BitEncodedInt(byteCount);
Это способ кодировать целое число, используя наименьшее возможное количество байтов. Для коротких строк (которые мы будем использовать изо дня в день, длиной не более 128 символов), он может быть представлен одним байтом. Для более длинных строк он начинает использовать больше байтов.
Вот код этой функции на тот случай, если вы заинтересованы:
protected void Write7BitEncodedInt(int value)
{
uint num = (uint) value;
while (num >= 0x80)
{
this.Write((byte) (num | 0x80));
num = num >> 7;
}
this.Write((byte) num);
}
После добавления префикса длины в этой кодировке он записывает байты для символов в нужной кодировке.