Я пишу класс, который используется для работы с буфером byte[]
.Он содержит такие методы, как char Peek()
и string ReadRestOfLine()
.
. Проблема в том, что я хотел бы добавить поддержку юникода, и я действительно не знаю, как мне изменить эти методы (они теперь поддерживают только ASCII).
Как определить, что следующие байты в буфере являются последовательностью Unicode (utf8 или utf16)?И как мне преобразовать их в char
?
Обновление
Да, класс немного похож на StreamReader
, но с той разницей, чтоон будет избегать создания объектов (например, string
, char[]
) и т. д., пока не будет найдена вся искомая строка.Он используется в высокопроизводительной среде сокетов.
Например: допустим, я хочу написать прокси, который будет проверять только URI в HTTP-запросе.Если бы я использовал StreamReader
, мне пришлось бы создавать массив временных символов каждый раз, когда новый прием завершался, просто чтобы увидеть, был ли получен символ новой строки.
Используя класс, который работает непосредственно с буфером byte[]
, который использует socket.ReceiveAsync
, мне просто нужно пройти через буфер в моем анализаторе, чтобы узнать, можно ли завершить следующий шаг.Временные объекты не создаются.
Для большинства протоколов ASCII используется в области заголовка, и UTF8 не будет проблемой (тело запроса может быть проанализировано с использованием StreamReader
).Мне просто интересно, как это можно решить, избегая создания ненужных объектов.