Пакет: matlab.net.http.io
Суперклассы: matlab.net.http.io.ContentConsumer
Потребитель для нескольких типов контента в сообщениях HTTP
Используйте этого потребителя, чтобы обработать потоковую передачу для нескольких типов контента, когда вы не можете предсказать заранее, какие типы сервер возвращает.
Класс matlab.net.http.io.GenericConsumer
является классом handle
.
consumer = GenericConsumer
создает GenericConsumer
с помощью потребителей по умолчанию.
consumer = GenericConsumer(
создает types
,consumer
)GenericConsumer
, чтобы обработать заданный types
с помощью соответствующего consumer
. Можно задать несколько пар аргумента в любом порядке как types1,consumer1,...,typesN,consumerN
. MATLAB® ищет types
в порядке, они появляются, и использует первое соответствие. Если нет никаких соответствий среди заданных типов, MATLAB использует группу по умолчанию потребителей, в зависимости от типа.
consumer = GenericConsumer(
создает puthandle
)ContentConsumer
, который вызывает функцию, заданную puthandle
для каждого вызова метода putData
этого потребителя.
types
— Типы контентаТипы контента, заданные как массив строк, вектор символов или массив ячеек из символьных векторов. types
задает типы контента с помощью синтаксиса "type/subtype"
.
Тип и компоненты подтипа в каждом элементе types
обработаны как регулярные выражения, соответствующие против типа/подтипа ContentTypeField
в ответе, со сложением, что одинокое '*' для типа или подтипа совпадает с любым типом или подтипом, и все поисковые запросы привязываются и на запуске и на конце строки. Например,
Ввести/Выделить подтипы | Соответствия |
---|---|
text/* | Введите 'text' и любой подтип |
*/.*json.* | Любой тип с подтипом, который содержит 'json' |
*/.*json | Любой тип с подтипом, который заканчивается 'json' |
*/* | Любой тип или подтип |
Если подтипом является '*'
, можно не использовать запаздывающий '/*'
. text
совпадает с 'text/*'
.
types
ищется по порядку, они появляются, и первое соответствие используется. Если нет никаких соответствий среди заданных типов, группа по умолчанию потребителей используется, в зависимости от типа в этом порядке:
Ввести/Выделить подтипы | Потребитель по умолчанию |
---|---|
multipart/* | MultipartConsumer |
image/* | ImageConsumer |
.*/.*json.* | JSONConsumer |
*/* | StringConsumer |
*/* | BinaryConsumer |
В то время как и StringConsumer
и BinaryConsumer
используются для любого типа, StringConsumer
только принимает типы, для которых это может определить набор символов, заданный как text/*
, любой тип с атрибутом набора символов, или один из типов, которые знает MATLAB, символьно-ориентирован, таков как "application/xml"
и "application/javascript"
. Если StringConsumer
отклоняет тип, то BinaryConsumer
принимает тип и хранит неконвертированную полезную нагрузку в Response.Body.Data
как вектор uint8
.
Когда этот потребитель выбирает соответствующего делегата на основе этого критерии поиска, это вызывает метод initialize
делегата, чтобы видеть, принимает ли делегат полезную нагрузку. Если метод возвращает false
, чтобы указать, что делегат не принимает, то этот потребитель продолжает искать список, чтобы найти следующего делегата соответствия.
consumer
— Потребитель содержимогоmatlab.net.http.io.ContentConsumer
| указатель на функциюПотребитель содержимого, заданный как объект matlab.net.http.io.ContentConsumer
, который может обработать один из заданных типов или указатель на функцию, возвращающую ContentConsumer
, который может обработать те типы.
puthandle
— функция putDataОбработайте к функции со следующим синтаксисом ContentConsumer.putData
:
[length,stop] = putData(data)
где data
массив uint8
и length
является длиной того массива.
Используйте этот синтаксис, чтобы обработать весь вход с сервера с помощью одной функции, когда вы знаете тип данных, которые возвращает сервер. Функция не имеет доступа к ResponseMessage
или любой информации об этом потребителе.
AllocationLength
— Предложенный buffer sizeuint64
Предложенный buffer size, заданный как uint64
. MATLAB устанавливает AllocationLength
на ожидаемый размер буферов данных, переданных putData
. Фактический размер может быть меньшим или больше. Чтобы улучшать производительность, потребитель может использовать это значение, чтобы предварительно выделить пробел, чтобы обработать данные.
MATLAB устанавливает это свойство прежде, чем вызвать метод start
для удобства подклассов.
GetAccess | общественность |
SetAccess | общественность |
ContentLength
— Ожидаемая длина полезной нагрузкиuint64
| пустойОжидаемая длина полезной нагрузки, заданной как uint64
. Свойство обычно является свойством Value
matlab.net.http.field.ContentLengthField
в свойстве Header
.
Если ContentLength
пуст, то длина не известна. Полезная нагрузка заканчивается, когда putData(uint8.empty)
называется.
MATLAB устанавливает это свойство прежде, чем вызвать initialize
для удобства подклассов, которые могут извлечь выгоду из знания длины данных.
Если этот ContentConsumer
является делегатом потребителя верхнего уровня, то значение ContentLength
может отличаться от значения ContentLength
потребителя верхнего уровня.
Пример: numel(someData)
, где someData
является типом uint8
GetAccess | общественность |
SetAccess | общественность |
ContentType
Тип носителя полезной нагрузкиmatlab.net.http.MediaType
| пустойТип носителя полезной нагрузки, заданной как объект matlab.net.http.MediaType
. Свойство обычно является свойством Value
matlab.net.http.field.ContentTypeField
в свойстве Header
. Если свойство ContentType
пусто, то ContentTypeField
пуст или не существует.
MATLAB устанавливает это свойство прежде, чем вызвать initialize
для удобства подклассов, которые могут хотеть исследовать MediaType
. Подклассы могут установить это свойство, если они решают от данных, что это имеет различный MediaType
.
В конце передачи MATLAB копирует это значение в свойство Response.Body.ContentType
.
Пример: 'application/octet-stream'
GetAccess | общественность |
SetAccess | общественность |
Header
— Заголовок полезной нагрузки, в настоящее время обрабатываемойmatlab.net.http.HeaderField
Заголовок полезной нагрузки, в настоящее время обрабатываемой, заданный как объект matlab.net.http.HeaderField
.
Потребители используют этот заголовок, чтобы определить, как обработать полезную нагрузку, которая отправляется им. Для потребителя верхнего уровня это значение совпадает с Response.Header
. Для делегата значение может отличаться. Например, в многослойном сообщении, обработанном MultipartConsumer
, это - заголовок части, которую обрабатывает этот делегат. Делегат может все еще исследовать Response.Header
на заголовки исходного сообщения.
MATLAB устанавливает это свойство прежде, чем вызвать initialize
для удобства подклассов.
GetAccess | общественность |
SetAccess | общественность |
Request
— Завершенный RequestMessage
, который был отправленmatlab.net.http.RequestMessage
Завершенный RequestMessage
, который был отправлен, задал как объект matlab.net.http.RequestMessage
. Это - итоговый RequestMessage
после всех перенаправлений, который является возвращаемым значением completedrequest
из метода send
.
MATLAB устанавливает это свойство прежде, чем вызвать initialize
для удобства подклассов.
GetAccess | общественность |
SetAccess | общественность |
Response
— ResponseMessage
обрабатываетсяmatlab.net.http.ResponseMessage
ResponseMessage
, обрабатываемый, заданный как объект matlab.net.http.ResponseMessage
.
MATLAB устанавливает свойство Response
прежде, чем вызвать initialize
. Значением является ResponseMessage
после того, как заголовки были получены, но прежде, чем получить любую полезную нагрузку. В начале обработки сообщения ответа (или запуск части для многослойных сообщений), свойство ResponseMesssage.Body
является объектом MessageBody
с пустыми свойствами Data
и Payload
. Чтобы хранить полученные данные, потребители могут изменить свойства Response
и MessageBody.Data
во время передачи данных. Обычно, потребители, что процесс и затем хранит набор данных Response.Body.Data
к их обработанной полезной нагрузке, хотя это не требуется. При завершении передачи MATLAB возвращает этот Response
в вызывающую сторону send
. Потребители не должны изменять другие свойства Response
, такие как Header
или StatusLine
, когда те изменения возвращены в вызывающую сторону send
.
Свойство Response.Body.Payload
пусто во время передачи, и потребители не должны пытаться изменить его. Если свойство HTTPOptions.SavePayload
установлено, то MATLAB устанавливает Payload
на полученную полезную нагрузку в конце передачи сообщения или части (после вызова putData(uint8.empty)
) или когда исключение происходит.
Если исключение происходит в потребителе во время обработки сообщения, то MATLAB выдает объект HTTPException
. Свойство History
содержит это значение Response
.
Если потребитель является делегатом, который обрабатывает часть многослойного сообщения, то Response.Header
содержит заголовок целого сообщения, и свойства Payload
и Data
Response.Body
очищены прежде, чем вызов ContentConsumer
для каждой части. В конце каждой части новый ResponseMessage
добавляется в конец массива объектов ResponseMessage
в Body.Data
исходного ответа, содержащем Header
от этого объекта и Body
из этого свойства. Следующий делегат видит новый Response
с пустым MessageBody
, не MessageBody
предыдущего делегата.
GetAccess | общественность |
SetAccess | общественность |
Зависимый | tRUE |
URI
Место назначения запроса обрабатываетсяmatlab.net.URI
Место назначения запроса, обрабатываемого, заданного как объект matlab.net.URI
. Это значение является исходным целевым URI, как определено send
. Это не URI прокси или итоговый URI после перенаправлений.
MATLAB устанавливает это свойство прежде, чем вызвать initialize
для удобства подклассов.
GetAccess | общественность |
SetAccess | общественность |
PutMethod
— метод putData
[]
Метод putData
делегата, заданного как указатель на функцию или заданного как []
, если CurrentDelegate
установлен.
Это свойство установлено delegateTo
. Подклассы должны вызвать эту функцию в своем методе putData
, чтобы отправить данные делегату или закончить фрагмент делегата данных путем отправки uint8.empty
:
[len, stop] = obj.PutMethod(data);
В конце сообщения, после вышеупомянутого вызова любого делегата, чтобы закончить сообщение, подклассы должны установить PutMethod
освобождать и вызывать вызов putData(uint8.empty)
в их суперклассе так, чтобы этот класс знал, что сообщение закончилось. Этот вызов putData
оставит PutMethod
пустым или задерживать, это к аргументу puthandle
передало конструктору.
GetAccess | защищенный |
SetAccess | защищенный |
Зависимый | tRUE |
AppendFcn
— Функция, вызванная putData
, чтобы добавить дополнительные данныеФункция, заданная как указатель на функцию, вызванный методом putData
, чтобы добавить дополнительные данные. Метод putData
в этом классе вызывает функцию AppendFcn
, чтобы добавить данные, которые это получает в его аргументе data
к существующим данным в сообщении ответа. Функция должна иметь подпись:
AppendFcn(consumer,newdata)
где newdata
является данными, которые будут добавлены к массиву в consumer.Response.Body.Data
. Это - ответственность этого метода обновить consumer.CurrentLength
, чтобы отразить новую длину Data
. Если newdata
пуст, который указывает на конец потока, то функция должна обновить Response.Body.Data
к своему окончательному значению.
Поведение по умолчанию, если это свойство пусто, использует внутреннюю функцию, которая обрабатывает Data
как массив произвольных значений, поддерживающих функцию horzcat
. Это эффективно добавляет newdata
путем предварительного выделения пробела, поддержания CurrentLength
, чтобы быть фактической длиной хранимых данных. В конце сообщения это обрезает Response.Body.Data
до CurrentLength
.
Подклассы могут изменить это свойство, если horzcat
не подходит для добавлять процесса. Например, когда StringConsumer
создает скалярную строку, он добавил бы к строке с помощью функции plus
вместо horzcat
.
Подклассы, которые не вызывают ContentConsumer.putData
, чтобы добавить данные, или которые удовлетворены поведением horzcat
при добавлении данных, могут проигнорировать это свойство.
Пример: @customAppend
, где @customAppend
задан потребителем
GetAccess | защищенный |
SetAccess | защищенный |
CurrentDelegate
— ContentConsumer
, к которому этот потребитель делегируетmatlab.net.http.io.ContentConsumer
| []
ContentConsumer
, к которому этот потребитель делегирует, заданный как объект matlab.net.http.io.ContentConsumer
. Метод delegateTo
потребителя вызова (delegator) устанавливает свойство CurrentDelegate
. Если нет никакой текущей делегации, то значением является []
.
MATLAB устанавливает CurrentDelegate
на []
прежде, чем вызвать initialize
.
GetAccess | защищенный |
SetAccess | защищенный |
CurrentLength
— Длина данных в настоящее время в Response.Body.Data
uint64.empty
(значение по умолчанию) | uint64
Длина данных в настоящее время в свойстве Response.Body.Data
, заданном как uint64
.
Это свойство используется, когда Response.Body.Data
был предварительно выделен размеру, больше, чем фактический объем данных, в настоящее время сохраненный, чтобы указать на длину тех хранимых данных. Если это свойство пусто, то это означает, что весь Response.Body.Data
содержит хранимые данные или что подкласс ContentConsumer
избавляется от данных в некотором роде кроме хранения его в Response.Body.Data
.
Это свойство используется и устанавливается методом putData
в этом базовом классе, когда свойство AppendFcn
пусто. Именно в пользу подклассов вызывают putData
и хотят исследовать уже сохраненные данные и/или любые реализации AppendFcn
, которые поддерживают результаты в Response.Body.Data
.
Подклассы, которые используют putData
также, могут изменить это свойство сбросить положение в буфере, где данные хранятся. Например, когда функция AppendFcn
по умолчанию используется, подкласс, что процессы весь Response.Body.Data
на каждом вызове putData
больше не могут иметь использования для исходных данных, таким образом, это может сбросить свойство CurrentLength
к 1 так, чтобы следующий вызов putData
перезаписал буфер с новыми данными. Нет никакой потребности очистить элементы в буфере мимо конца новых данных.
Подклассы, которые не вызывают putData
, могут использовать это свойство отследить их собственные данные или могут оставить его, сбросил (пустой). MATLAB не помещает ограничений на значение, которое может быть установлено здесь и не использует его ни для какой цели кроме определить, где AppendFcn
по умолчанию должен сохранить следующий буфер данных, и где обрезать данные в конце сообщения. Установите это свойство опустеть перед итоговым вызовом putData(uint8.empty)
, чтобы предотвратить усечение данных.
MATLAB устанавливает это свойство опустеть перед каждым вызовом initialize
.
GetAccess | защищенный |
SetAccess | защищенный |
MyDelegator
— ContentConsumer
, который делегировал этому потребителюmatlab.net.http.io.ContentConsumer
| пустойContentConsumer
, который делегировал этому потребителю, заданному как объект matlab.net.http.io.ContentConsumer
. Если этот потребитель является делегатом, который был вызван другим потребителем, таким как GenericConsumer
или MultipartConsumer
, то это - потребитель вызова. Это пусто в потребителе верхнего уровня, заданном в вызове send
.
Делегаты могут использовать это свойство получить доступ к свойствам их delegators, например, определить, который потребитель делегировал им.
GetAccess | защищенный |
SetAccess | защищенный |
initialize | Подготовьте потребителя к новой полезной нагрузке HTTP |
start | Запустите передачу данных к GenericConsumer |
putData | Сохраните следующий буфер данных для GenericConsumer |
delegateTo | Делегируйте другому потребителю |
ContentConsumer
| ContentTypeField
| FileProvider
| RequestMessage
| ResponseMessage
| fopen
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.