Класс: 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 вызовите этот метод и используйте возвращаемое значение для установки поля заголовка 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 (сообщение отправляется с использованием кодировки передачи по частям), то единственной причиной переопределения этого метода и возврата непустого значения является двойная проверка для обеспечения возврата поставщиком ожидаемой длины данных.
В случаях, когда длина данных известна (то есть когда этот метод возвращает число или поле Content-Length не является пустым), этот поставщик getData метод должен возвращать stop=true после того, как будет возвращено именно такое количество байт. MATLAB всегда вызывает getData неоднократно, даже если length=0, до getData прибыль stop=true. В случаях, когда длина неизвестна, если это поставщик верхнего уровня (не многоточечный делегат), MATLAB использует кодирование передачи с порциями для отправки содержимого, и поставщик может возвращать любую длину данных, включая ни одну, до установки stop=true.
Вы должны вернуться [] если вы не знаете длину данных заранее, или если вычисление длины данных займет много времени. Безвредно (и совершенно нормально) позволять любому сообщению использовать кодирование с порциями, даже если вы знаете длину. Если этот поставщик является делегатом из нескольких частей, непустое возвращаемое значение используется только для принудительной ошибки в случае getData возвращает более или менее байтов и не приводит к появлению поля заголовка Content-Length в детали. См. 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, JSONProvider expectedContentLength метод обрабатывает все данные (возможно, кэшируя выходную строку внутри для последующего использования ее putData метод) и возвращает длину этой строки.
Access | protected |
complete | getData | Заголовок | JSONProvider | matlab.net.http.RequestMessage | MultipartProvider | Запрос