Класс: matlab.net.http.io.StringConsumer
Пакет: matlab.net.http.io
Добавьте следующий буфер строковых данных к ответу
[len,stop] = putData(consumer,data)
[
преобразует len
,stop
] = putData(consumer
,data
)data
в Юникод® строка с использованием текущего значения свойства Charset и добавляет результаты к Response.Body.Data
. Во время этого процесса преобразованная в данный момент строка находится на Response.Body.Data
. Если свойство TextType 'char'
, затем только символы до CurrenLength
действительны.
Если data
является []
, это указывает конец сообщения. По возвращении, Response.Body.Data
содержит целую преобразованную строку или вектор символов.
Для многобайтовых кодировок, таких как UTF-8, возможно, что заданный буфер data
заканчивается частичным многобайтовым символом. В этом случае Response.Body.Data
может отсутствовать последний символ до следующего вызова на putData
завершает его.
Этот метод является переопределенным методом putData
. Если вы реализуете подкласс этого потребителя и хотите изучить необработанные байты перед преобразованием charset, то переопределите этот метод, исследуйте data
, изменить Charset
свойство при необходимости, а затем пройти data
к этому суперклассу метод для преобразования и хранения в Response.Body.Data
. Если вы меняете Charset
после putData
уже вызван для обработки предыдущих буферов, следует иметь в виду, что частичный многобайтовый символ в конце предыдущего буфера, который еще не был преобразован, может быть потерян. Это не произойдет, если все ранее полученные символы являются однобайтовыми (для примера, US-ASCII или подмножества ASCII UTF-8).
Более вероятным сценарием является то, что вы хотите изучить каждый буфер данных по мере его поступления после преобразования charset. Для этого переопределите этот метод следующим образом (это работает 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
метод только в конце данных с пустым аргументом.
Access | public |
Для примера подкласса этого метода смотрите PricesStreamer
классы putData
метод в отображении Streamed Data in Окно Фигуры.