putData
类: matlab.net.http.io.ContentConsumer
命名空间: matlab.net.http.io
处理或保存 ContentConsumer 的下一个数据缓冲区
语法
[size,stop] = putData(consumer,data)
说明
[ 为从服务器读取到 size,stop] = putData(consumer,data)consumer 的 data 提供一个缓冲区。
MATLAB® 调用 putData。子类使用程序可以覆盖此方法来接收以流方式传输的数据。您的使用程序应在 size 中返回实际处理的数据长度,在 stop 中返回 true/false 指示,以指定是否希望接收来自此消息的更多数据。
当 MATLAB 调用具有空 data 参量的 putData 时,即表示消息或 Multipart 消息中的一部分已结束。
如果您为实现此方法的使用程序创建子类,则您的 putData 方法可以调用超类 putData,以利用超类实现的任何转换或处理。
MATLAB 将 data 缓冲区的大小限制为 start 方法返回的 bufsize,如果 bufsize 为 [],则限制为内部缓冲区大小。此外,如果服务器发送块编码消息,则对 putData 的给定调用所提供的块绝不会超过一个。当 bufsize 远大于块大小时,这样可以确保使用程序能够及时获得缓慢到达的块。
putData() 在此基类中的默认行为如下:
子类使用程序可以选择是将它们可能转换的内容直接存储在 Response.Body.Data 中(增量方式或一次性),还是以其他方式处理这些内容。子类使用程序不需要调用此 putData 方法来存储数据。为方便起见,希望以增量方式将内容存储在 Response.Body.Data 中的使用程序可以调用此方法来实现此目的。此方法使用 AppendFcn 将 data 追加到 Response.Body.Data 中,尝试通过增量分配内存容量来有效地完成此操作。实际存储的数据长度在 CurrentLength 属性中维护,此值可能小于 Response.Body.Data 的实际长度。在传输结束时(例如,当调用 putData(consumer,[]) 或 putData(consumer,uint8.empty) 时),将根据 CurrentLength 截断 Response.Body.Data。您可以定义自己的 AppendFcn 来实现其他追加方法。
默认情况下,此方法返回的 size 始终等于 numel(data),stop 始终等于 false。
如果您打算使用此方法来存储数据,并且您知道要存储的数据的最大长度,则您应该在第一次调用此方法之前将 Response.Body.Data 设置为具有所需大小并用默认值(例如零值)填充的向量。此方法开始在数据区的开头处存储数据,并在消息结束时根据数据的长度截断,以维护 CurrentLength 中存储的数据长度。
调用此基类中的此方法通过增量方式存储数据的使用程序可以提供支持 horzcat 或 vertcat 的任何类型的 data,包括结构体和元胞数组。如果您提供元胞数组,现有数据将转换为元胞数组(如果尚未转换),并将元胞数组的元素插入到现有元胞数组中从 CurrentLength+1 开始的线性索引处。
如果您在 ContentConsumer 中调用此方法来存储数据,则应该让此方法管理 Response.Body.Data 或 CurrentLength,而不是直接修改它们。
在超类中调用此方法的 ContentConsumers 应准备好执行清理操作,例如,在超类抛出异常时关闭窗口或删除临时文件。
输入参数
输出参量
属性
Access | public |
版本历史记录
在 R2018a 中推出