Класс: matlab.net.http. iO . StringConsumer
Пакет: matlab.net.http. iO
Добавьте следующий буфер данных строки к ответу
[len, остановитесь] = putData (потребитель, данные)
преобразовывает [len,stop] = putData(consumer,data)
data
в строку Unicode® с помощью текущей стоимости свойства Charset и добавляет результаты к Response.Body.Data
Данные. Во время этого процесса в настоящее время конвертированная строка в Response.Body.Data
Данные. Если свойством TextType является 'char'
, то только символы до CurrenLength
допустимы.
Если data
является []
, он указывает на конец сообщения. По возврату Response.Body.Data
содержит целую конвертированную строку или вектор символа.
Для многобайтовой кодировки, такой как UTF-8, возможно, что данный буфер data
заканчивается неполным многобайтовым символом. В этом случае Response.Body.Data
может пропускать тот последний знак, пока следующий вызов putData
не завершает его.
Этот метод является переопределенным методом ContentConsumer.putData
. Если вы реализуете подкласс этого потребителя и хотите исследовать необработанные байты перед преобразованием набора символов, то заменяете этот метод, исследуете data
, изменяете свойство Charset
при необходимости, и затем передаете data
этому методу суперкласса для преобразования и устройства хранения данных в Response.Body.Data
Данные. Если вы изменяете Charset
после того, как putData
был уже назван, чтобы обработать предыдущие буферы, знают, что мог быть потерян неполный многобайтовый символ в конце предыдущего буфера, который еще не был преобразован. Это не произошло бы, если все символы, ранее полученные, являются однобайтовыми (например, US-ASCII или подмножество ASCII UTF-8).
Более вероятный сценарий - то, что вы хотите исследовать каждый буфер данных, когда он прибывает после преобразования набора символов. Для этого замените этот метод можно следующим образом (это работает, является ли TextType
char
или string
):
function [len, stop] = putData(obj, data) oldLength = obj.CurrentLength; % send raw bytes to StringConsumer for conversion [len, stop] = obj.putData@matlab.net.http.io.StringConsumer(data); newData = obj.Response.Body.Data.extractAfter(oldLength); % ...process newData...
Теперь newData
содержит последний раз добавленные данные после преобразования. Обратите внимание на то, что вышеупомянутый шаблон все еще хранит получившую строку в Response.Body.Data
Данные.
Если ваш подкласс хочет передать свои собственные результаты потоком в ответ после обработки строки, используйте метод convert
, чтобы преобразовать ваши данные на основе TextType
и Charset
в этом объекте. В этом случае вызовите этот метод putData
только в конце данных с пустым аргументом.
Доступ | public |
Для примера, разделяющего этот метод на подклассы, смотрите класс PricesStreamer
метод putData
в Отображении Переданные потоком Данные в Окне фигуры.
Набор символов | ContentConsumer.putData
| Ответ | StringConsumer.convert
| TextType