Предположим, вы получаете данные через сокетное соединение.Вы получите длинный текст в виде нескольких byte[]
блоков.
Возможно, что 1 символ Unicode занимает 2+ байта в потоке UTF-8 и что он разделен на 2 байтовых блока.Кодирование двухбайтовых блоков отдельно (и конкатенация строк) приведет к ошибке.
Таким образом, вы можете указать flush=true
только в последнем блоке.И, конечно, если у вас есть только 1 блок, то это также последний.
Подсказка: используйте TextReader и позвольте ему решить эту проблему (проблемы) для вас.
Редактировать
Проблема с зеркалом (которая фактически задавалась: GetBytes) немного сложнееобъяснить.
Использование flush=true
аналогично использованию Encoder.Reset()
после GetBytes(...)
.Он очищает «состояние» кодера,
, включая завершающие символы в конце предыдущего блока данных, такие как непревзойденный старший суррогат
Основная идея заключается в том, чтото же самое: при преобразовании из string
в байтовые блоки или наоборот, блоки не независимы.