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