exponenta event banner

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и указание true/false в stop для определения необходимости получения дополнительных данных из этого сообщения.

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

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

MATLAB ограничивает размер data буферы в bufsize значение, возвращенное start метод или внутренний размер буфера, если 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 vector - обычный буфер данных, считываемых с сервера.

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

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

Признаки

Accesspublic
Представлен в R2018a