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 вызовите этот метод и используйте возврат значение, чтобы установить поле заголовка Content-Length в 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 в своем сообщении (сообщение отправляется с использованием chunked transfer coding), то единственная причина переопределить этот метод и вернуть непустое значение - это двойная проверка, чтобы убедиться, что ваш провайдер вернет ожидаемую длину данных.

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

Вы должны вернуться [] если вы не знаете длительность данных усовершенствование, или если вычисление длины данных было бы длительным. Безвредно (и совершенно нормально) позволять любому сообщению использовать chunked transfer coding, даже если вы знаете длину. Если этот провайдер является делегатом из нескольких частей, непустое возвращаемое значение используется только для принудительной ошибки в случае getData возвращает больше или меньше байтов и не приведет к появлению поля заголовка Content-Length в детали. См. MultipartProvider для получения дополнительной информации.

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

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

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

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

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

расширить все

Поставщик содержимого, заданный как matlab.net.http.io.ContentProvider объект.

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

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

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

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

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

расширить все

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

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

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

Признаки

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