Класс: matlab.net.http.io.ContentProvider
Пакет: matlab.net.http.io
Длина содержимого ContentProvider
length = expectedContentLength(provider)
length = expectedContentLength(provider,force)
возвращает ожидаемую длину содержимого в байтах. Этот метод предназначается, чтобы быть замененным подклассами, которые хотят сообщить об их длине содержимого MATLAB®. length
= expectedContentLength(provider
)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
, JSONProvider
expectedContentLength
процессы метода все данные (возможно, кэширующий выводимую строку внутренне для дальнейшего использования ее putData
метод), и возвращает длину той строки.
Access | protected |
complete
| getData
| Заголовок | JSONProvider
| matlab.net.http.RequestMessage
| MultipartProvider
| Запрос