expectedContentLength

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

Длина содержимого ContentProvider

Синтаксис

length = expectedContentLength(provider)
length = expectedContentLength(provider,force)

Описание

length = expectedContentLength(provider) возвращает ожидаемую длину содержимого в байтах. Этот метод предназначается, чтобы быть замененным подклассами, которые хотят сообщить об их длине содержимого MATLAB®. RequestMessage.send и RequestMessage.complete вызовите этот метод и используйте возвращаемое значение, чтобы установить поле заголовка Довольной Длины в RequestMessage. Если сообщение уже имеет поле Content-Length со значением и length непусто, затем его значение должно быть равно значению в том поле Content-Length. length может быть 0, чтобы указать, что нет никакого содержимого, в этом случае первый вызов getData должен возвратить пустой data и stop=true.

MATLAB вызывает этот метод от RequestMessage.send, RequestMessage.complete и в делегате delegateTo. MATLAB вызывает это после ContentProvider.complete и перед ContentProvider.start. Если этот метод называется прежде, чем вызвать complete, затем возвращаемое значение может быть недопустимым, потому что провайдер не может обязательно определить длину своих конвертированных данных, не видя все поля заголовка, которые управляют преобразованием.

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

В случаях, где длина данных известна (то есть, то, когда этот метод возвращает номер или поле Content-Length, непусто), getData этого провайдера метод должен возвратить stop=true после точно, что количество байтов было возвращено. MATLAB всегда вызывает getData неоднократно, даже если length=0, до getData возвращает stop=true. В случаях, где длина не известна, если это - провайдер верхнего уровня (не многослойный делегат), то использование MATLAB разделило кодирование передачи на блоки, чтобы отправить содержимое и провайдера, свободно возвратить любую длину данных, включая ни один, до установки stop=true.

Необходимо возвратить [] если бы вы не знаете длину данных заранее, или если вычисление длины данных было бы длительно. Это безопасно (и совершенно нормально) позволить любому сообщению использовать разделенное на блоки кодирование передачи, даже если вы знаете длину. Если этот провайдер является многослойным делегатом, непустое возвращаемое значение только используется, чтобы обеспечить ошибку в случае, если getData возвращается больше или меньше байтов и не заставит поле заголовка Довольной Длины появляться в части. Смотрите MultipartProvider для получения дополнительной информации.

length = expectedContentLength(provider,force), если force true, требует, чтобы вы возвратили длину данных, вычислив его при необходимости, даже если вы в противном случае возвратили бы [], если вычисление длины не невозможно. Если возврат этого номера требует долгого расчета или генерации всех данных в сообщении, затем необходимо кэшировать данные так, чтобы вы не повторно вычисляли его в последующем getData вызовы. force аргумент обеспечивается для использования подклассами, кто должен знать длину данных заранее. MATLAB никогда не устанавливает эту опцию при вызове этого метода, и если вы знаете, что ваш провайдер никогда не используется в качестве подкласса, который может установить эту опцию, затем можно проигнорировать force аргумент.

Вызывающие стороны этого метода, которые получают [] в ответ на установку force к true может или считать его ошибкой или вести себя способом, который совместим с содержимым неизвестной длины.

Определение force может инвертировать преимущество потоковой передачи (отправляющий данные, когда это генерируется), если это требует, чтобы все данные были сгенерированы, чтобы вычислить length, таким образом, эта опция лучше всего используется для особых случаев, e.g. отладка, или когда длина данных, как известно, мала.

Пример использования force гипотетический CompressProvider это опционально сжимает выход любого другого провайдера, но только если тот выход больше определенной длины (потому что сжатие неэффективно для коротких сообщений). Определить длину, CompressProvider потребности вызвать expectedContentLength другого провайдера с force установите на true. Если тот другой провайдер является потоковой передачей JSONProvider, expectedContentLength обычно возвращает [], потому что определение длины строки JSON требует обработки всех входных данных. С force установите на true, JSONProviderexpectedContentLength процессы метода все данные (возможно, кэширующий выводимую строку внутренне для дальнейшего использования ее putData метод), и возвращает длину той строки.

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

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

Контент-провайдер в виде matlab.net.http.io.ContentProvider объект.

Укажите, возвратить ли длину данных в виде true или false.

Если true, expectedContentLength должен возвратить длину данных, вычислив его при необходимости, даже если вы в противном случае возвратили бы [], если вычисление длины не невозможно. Если возврат этого номера требует долгого расчета или генерации всех данных в сообщении, затем необходимо кэшировать данные так, чтобы вы не повторно вычисляли его в последующем getData вызовы. force аргумент обеспечивается для использования подклассами, кто должен знать длину данных заранее. MATLAB никогда не устанавливает эту опцию при вызове этого метода, и если вы знаете, что ваш провайдер никогда не используется в качестве подкласса, который может установить эту опцию, затем можно проигнорировать force аргумент.

Вызывающие стороны этого метода, которые получают [] в ответ на установку force к true может или считать его ошибкой или вести себя способом, который совместим с содержимым неизвестной длины.

Определение force может инвертировать преимущество потоковой передачи (отправляющий данные, когда это генерируется), если это требует, чтобы все данные были сгенерированы, чтобы вычислить length, таким образом, эта опция лучше всего используется для особых случаев, например, отладки, или когда длина данных, как известно, мала.

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

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

Ожидаемая длина содержимого, в байтах. Если вы не заменяете этот метод, то expectedContentLength возвращается. MATLAB определяет длину содержимого можно следующим образом.

  • Если этот ContentProvider не многослойный делегат (см. MultipartProvider), и сообщение имеет поле Content-Length с непустым значением (вставленный в исходный RequestMessage или добавил к Header свойство complete метод), затем что поле Content-Length является длиной содержимого.

  • Если нет никакого поля Content-Length (или этот провайдер является многослойным делегатом), то полезная нагрузка (или данные в части) концы, когда getData этого провайдера метод устанавливает stop возвращаемое значение. В этом случае длина содержимого не должна быть задана.

Атрибуты

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