putData

Класс: matlab.net.http.io.ContentConsumer
Пакет: matlab.net.http.io

Процесс или сохраняет следующий буфер данных для ContentConsumer

Синтаксис

[size,stop] = putData(consumer,data)

Описание

[size,stop] = putData(consumer,data) обеспечивает буфер data читайте от сервера до consumer.

MATLAB® вызовы putData. Потребители подкласса могут заменить этот метод, чтобы получить переданные потоком данные. Ваш потребитель должен возвратить длину данных, которые она на самом деле обработала в size, и истинное / ложное показание в stop задавать, хочет ли это получить дальнейшие данные из этого сообщения.

Когда MATLAB вызывает putData с пустым data аргумент, это означает, что часть сообщения или сообщения в случае многослойного сообщения закончилась.

Если вы создаете подкласс потребителя, который реализует этот метод, ваш putData метод может вызвать свой суперкласс putData использовать в своих интересах любые преобразования или обработку, которую реализует суперкласс.

MATLAB ограничивает размер data буферы к bufsize значение возвращено start метод или внутренний buffer size, если bufsize []. Кроме того, если сервер отправляет закодированное фрагментом сообщение, то данный вызов putData никогда не обеспечивает больше чем один фрагмент. Это позволяет потребителю получать медленно прибывающие фрагменты своевременно даже если bufsize намного больше, чем размер фрагмента.

Поведение по умолчанию putData() в этом базовом классе:

У потребителей подкласса есть опция хранения их возможно конвертированного содержимого непосредственно в Response.Body.Data, или инкрементно или целиком или избавление от него некоторым другим способом. Потребитель подкласса не должен вызывать этот putData метод, чтобы хранить данные. Как удобство, потребители, которые хотят сохранить содержимое инкрементно в Response.Body.Data может вызвать этот метод, чтобы сделать так. Этот метод добавляет data к Response.Body.Data использование AppendFcn, попытка сделать так эффективно путем инкрементного выделения способности. Фактическая длина хранимых данных обеспечена в CurrentLength свойство, которое может быть меньшим, чем фактическая длина Response.Body.Data. В конце передачи (например, когда putData(consumer,[]) или putData(consumer,uint8.empty) называется, Response.Body.Data является усеченным к CurrentLength. Можно задать собственный AppendFcn чтобы реализовать альтернативу добавляют метод.

По умолчанию этот метод всегда возвращает size равняйтесь numel(data) и stop равняйтесь false.

Если вы намереваетесь использовать этот метод, чтобы хранить данные, и вы знаете, что максимальная длина данных хранится, то необходимо установить Response.Body.Data к вектору из желаемого размера, заполненного значениями по умолчанию (например, нули), прежде, чем вызвать этот метод впервые. Этот метод начинает хранить данные в начале вашей области данных и затем обрезает его до длины данных в конце сообщения, обеспечивая длину данных, хранимых в CurrentLength.

Потребители, которые вызывают этот метод в этом базовом классе, чтобы хранить данные инкрементно, могут обеспечить data из любого типа, который поддерживает horzcat или vertcat, включая структуры и массивы ячеек. Если вы обеспечиваете массив ячеек, существующие Данные преобразованы в массив ячеек, если это уже не, и элементы массива ячеек вставляются в массив существующей ячейки в линейном индексе, начинающемся в CurrentLength+1.

Если вы вызываете этот метод в ContentConsumer чтобы хранить данные, затем необходимо позволить этому методу управлять Response.Body.Data или CurrentLength и не изменяют их непосредственно.

ContentConsumers тот вызов этот метод в их суперклассе должен быть готов сделать любую очистку, такую как закрытие окон или удаление временных файлов, если суперкласс выдает исключение.

Входные параметры

развернуть все

Потребитель содержимого в виде matlab.net.http.io.ContentConsumer объект.

Буфер необработанных данных в matlab.net.http.ResponseMessage объект в виде того следующего:

  • непустой uint8 вектор - нормальный буфер данных, считанных из сервера.

  • uint8.empty - Конец данных. Это - нормальный способ, которым MATLAB указывает, что сообщение ответа закончилось. Это - индикация для потребителя, чтобы вымыться (например, удалить временные файлы или усеченные данные об ответе к текущей длине) и быть готовым к возможному будущему вызову инициализировать для последующего сообщения. В ответ потребитель должен возвратить stop=true и size=0 указать, что обработка была успешна без новых обработанных байтов. Если потребитель возвращает size=[], затем у потребителя была проблема при завершении данных, и MATLAB выдает HTTPException назад вызывающей стороне RequestMessage.send.

  • [] (пустой двойной) - сервер, сетевая проблема или пользователь (использующий Ctrl+C) прервали передачу. Потребитель должен обычно мыться точно так же, как если uint8.empty был получен, но некоторые потребители могут удалить любые неполные данные, уже полученные. По возврату из putData, MATLAB выдает HTTPException чей History.Response содержит любые данные, которые потребитель хранил в его Response свойство.

Большинство потребителей, которые не заботятся о различии между [] и uint8.empty может просто проверять isempty(data) и вымойтесь соответственно. В каждом случае, где data пусто, потребители должны вызвать свой суперкласс putData с тем же самым пустым значением, даже если они не используют свой суперкласс putData чтобы хранить данные, как, это - единственный способ, которым суперкласс знает, чтобы вымыться. После получения пустого значения data, реализации должны проигнорировать последующие вызовы putData с пустыми значениями, до следующего вызова start. Обычно они должны возвратить stop=false и size=0 на последующих вызовах и не выполняют любую дополнительную обработку.

Выходные аргументы

развернуть все

Длина обработанных данных, возвратилась как двойная или пустая дважды. Если значение size :

  • size >= 0, size <= length(data) - Количество байтов data обработанный этим вызовом putData. Номер используется только в пользу подклассов этого потребителя, чтобы знать, сколько данных было обработано. Это не оказывает влияния на будущие вызовы putData. Если data пусто, затем size проигнорирован.

  • size < 0 - Результат abs(size) количество обработанных байтов. То же самое как предыдущий случай, но кроме того, MATLAB тихо пропускает остаток от данных, выполняя еще один вызов к putData(uint8.empty) в конце данных. Если MultipartConsumer не используется, это похоже на возврат stop=true, за исключением дополнительного вызова putData в конце. Если MultipartConsumer используется, отрицательная величина size только заканчивает часть и не влияет на обработку последующих частей сообщения, таким образом, связь не закрывается до следующей части или конца сообщения достигнут.

  • size = [] (пустой двойной) - потребитель решил, что что-то пошло не так, как надо с передачей, и должны быть отключены дальнейшие передачи с сервера. Это похоже на stop=true, но это рассматривается ошибкой, вызывая стандартный HTTPException быть выданным вызывающей стороне RequestMessage.send указание, что потребитель прервал связь. В этом случае единственный путь вызывающая сторона может получить частично обработанный ResponseMessage через HTTPException.History.

    Как альтернатива возврату size=[] выдавать стандартное исключение, ваш putData метод может непосредственно выдать свое собственное исключение, которое MATLAB переносит как причина в HTTPException возвращенный в вызывающую сторону RequestMessage.send.

Укажите, получить ли дальнейшие данные из этого сообщения в виде true или false. Если stop true, затем MATLAB прекращает обрабатывать остальную часть сообщения, включая любые последующие части многослойного сообщения, обрабатываемого MultipartConsumer, тихо продолжая, как будто конец сообщения был достигнут, даже если сообщение имеет больше данных. Это сразу закрывает связь с сервером, и никакая ошибка не возвращена в вызывающую сторону RequestMessage.send. Это не рассматривается состоянием ошибки и является нормальным способом отключить получение потока произвольной длины корректно. Если stop=true и data не уже пусто, затем MATLAB выполняет один дополнительный вызов к putData с пустым data. stop=true может быть установлен действительно ли data isempty.

Потребители не должны обычно устанавливать stop=true в конце data, потому что, если бы они - многослойные делегаты, которые отключили бы обработку для остальной части сообщения. Чтобы отключить обработку только для их собственной части сообщения, потребители должны возвратить size < 0 указать, что они не хотят получать больше данных для своей части.

Атрибуты

Accesspublic
Введенный в R2018a