expectedContentLength
类: 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 标头字段。如果消息已经有一个包含值的 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
为止。在数据长度未知的情况下,如果这是顶层提供程序(不是 Multipart 代理),则 MATLAB 使用分块传输编码来发送内容,并且提供程序在设置 stop=true
之前可以返回任何长度的数据,包括无数据。
如果您事先不知道数据的长度,或者计算数据的长度非常耗时,则应返回 []
。即使您知道数据长度,允许任何消息使用分块传输编码也没有害处(而且是完全正常的)。如果此提供程序是 Multipart 代理,则非空返回值仅用于在 getData
返回更多或更少字节时强制引发错误,不会导致 Content-Length 标头字段出现在该部分。有关详细信息,请参阅 MultipartProvider
。
如果 force
为 true
,则
要求您返回数据的长度,如果有必要,则计算数据长度,即使您更希望返回 length
= expectedContentLength(provider
,force
)[]
,除非计算长度是不可能的。如果返回数据长度需要进行长时间计算或生成消息中的所有数据,则您应该将数据缓存起来,这样后续 getData
调用将不必重新计算。force
参量是为必须提前知道数据长度的子类提供的。MATLAB 在调用此方法时从不设置此选项,而且如果您知道您的提供程序绝不会被用作可能设置此选项的子类,则您可以忽略 force
参量。
此方法的调用方如果因为将 force
设置为 true
而得到 []
,则可以将其视为错误,也可以按照与未知内容长度兼容的方式进行处理。
如果需要生成所有数据才能计算 length
,则指定 force
可能会抵消流传输(一边生成数据一边发送)所带来的好处,所以此选项最好只在特殊情况下使用,例如,在进行调试时或在已知数据长度很小时。
假设有一个 CompressProvider
,它可以压缩其他任何提供程序的输出,但仅在输出大于某个长度时才压缩(因为对短消息来说压缩无效),这时可以使用 force
。要确定长度,CompressProvider
需要调用其他提供程序的 expectedContentLength
,并将 force
设置为 true
。如果该提供程序是流传输 JSONProvider
,则 expectedContentLength
通常返回 []
,因为确定 JSON 字符串的长度需要处理所有输入数据。当 force
设置为 true
时,JSONProvider
的 expectedContentLength
方法将处理所有数据(可能在内部缓存输出字符串以便其 putData
方法稍后使用),并返回该字符串的长度。
输入参数
输出参量
属性
Access | protected |
版本历史记录
在 R2018a 中推出
另请参阅
matlab.net.http.RequestMessage
| Request | Header | getData
| complete
| MultipartProvider
| JSONProvider