expectedContentLength
类:matlab.net.http.io.ContentProvider
包:matlab.net.http.io
ContentProvider的内容长度
语法
length = expectedContentLength(provider)
length = expectedContentLength(provider,force)
描述
以字节为单位返回预期的内容长度。此方法旨在被想要向MATLAB报告其内容长度的子类覆盖®。长度
= expectedContentLength (提供者
)RequestMessage.send
和RequestMessage.complete
调用此方法并使用返回值来设置的内容长度头字段RequestMessage
。如果消息已经有一个带有值的Content-Length字段,并且长度
非空,则其值必须等于该Content-Length字段中的值。长度
可能为0表示没有内容,在这种情况下,第一次调用getData
应空返回数据
和停止= true
。
调用这个方法RequestMessage.send
,RequestMessage.complete
在委托中delegateTo
。MATLAB将其称为ContentProvider.complete
之前,ContentProvider.start
。如果在调用之前调用此方法完整的
,则返回值可能无效,因为提供者在没有看到控制转换的所有报头字段的情况下不一定能确定其转换数据的长度。
如果您不选择在消息中使用Content-Length头字段(消息是使用分块传输编码发送的),那么重写此方法并返回非空值的唯一原因是作为双重检查,以确保提供程序返回预期的数据长度。
在已知数据长度的情况下(即,当此方法返回一个数字或Content-Length字段非空时),此提供程序的getData
方法必须返回停止= true
在准确返回字节数之后。MATLAB总是调用getData
反复地,即使长度= 0
,直到getData
返回停止= true
。在长度未知的情况下,如果这是顶级提供程序(不是多部分委托),则MATLAB使用分块传输编码发送内容,并且提供程序可以在设置之前自由返回任何长度的数据,包括没有停止= true
。
你应该回来[]
如果您事先不知道数据的长度,或者计算数据的长度会很耗时。允许任何消息使用分块传输编码是无害的(也是完全正常的),即使您知道其长度。如果此提供程序是多部分委托,则非空返回值仅用于在case中强制执行错误getData
返回更多或更少字节,并且不会导致在部件中出现Content-Length报头字段。看到MultipartProvider
了解更多信息。
,如果长度
= expectedContentLength (提供者
,力
)力
是真正的
,要求您返回数据的长度,必要时计算它,即使您不返回[]
,除非无法计算长度。如果返回这个数字需要长时间的计算或生成消息中的所有数据,则应该缓存数据,以便在后续操作中不必重新计算它getData
调用。的力
参数提供给必须提前知道数据长度的子类使用。MATLAB在调用此方法时从不设置此选项,并且如果您知道您的提供程序从未用作可能设置此选项的子类,那么您可以忽略力
论点。
这个方法的调用者[]
作为对设置的响应力
来真正的
可以将其视为错误,或者以与未知长度的内容兼容的方式行事。
指定力
如果需要生成所有数据才能进行计算,那么流(在生成数据时发送数据)的好处会否被否定长度
,所以这个选项最好用于特殊情况,例如调试,或者当已知数据长度很小的时候。
的用法的例子力
是一个假设CompressProvider
这可以选择性地压缩任何其他提供者的输出,但仅当该输出大于某个长度时(因为压缩对于短消息是低效的)。要确定长度,请使用CompressProvider
需要调用其他提供者的expectedContentLength
与力
设置为真正的
。如果其他提供商是流媒体JSONProvider
,expectedContentLength
通常回报[]
,因为确定JSON字符串的长度需要处理所有的输入数据。与力
设置为真正的
,JSONProvider
的expectedContentLength
方法处理所有数据(可能在内部缓存输出字符串以供其putData
方法),并返回该字符串的长度。
输入参数
输出参数
属性
访问 |
受保护的 |
版本历史
在R2018a中引入