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, таким образом, эта опция лучше всего используется для особых случаев, например, отладки, или когда длина данных, как известно, является маленькой.

Примером использования force является гипотетический CompressProvider, который опционально сжимает вывод любого другого провайдера, но только если тот вывод больше, чем определенная длина (потому что сжатие неэффективно для коротких сообщений). Чтобы определить длину, CompressProvider должен вызвать expectedContentLength другого провайдера с набором force к true. Если тот другой провайдер является потоковой передачей JSONProvider, expectedContentLength обычно возвращает [], потому что определение длины строки JSON требует обработки всех входных данных. С набором force к true, процессы метода expectedContentLength JSONProvider все данные (возможно, кэширующий выводимую строку внутренне для дальнейшего использования ее методом 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

Для просмотра документации необходимо авторизоваться на сайте