putData

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

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

Синтаксис

[размер, остановитесь] = putData (потребитель, данные)

Описание

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

  • [] (пустой двойной) - сервер, сетевая проблема или пользователь (использующий 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.

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

Атрибуты

Доступpublic

Представленный в R2018a

Была ли эта тема полезной?