putData
类: matlab.net.http.io.StringConsumer
命名空间: matlab.net.http.io
将下一个字符串数据缓冲区追加到响应中
语法
[len,stop] = putData(consumer,data)
说明
[ 使用 Charset 属性的当前值将 len,stop] = putData(consumer,data)data 转换为 Unicode® 字符串,并将结果追加到 Response.Body.Data 中。在此过程中,当前转换的字符串位于 Response.Body.Data 处。如果 TextType 属性为 'char',则最多只有 CurrenLength 个字符有效。
如果 data 为 [],则表示消息结束。返回时,Response.Body.Data 包含整个转换后的字符串或字符向量。
对于多字节编码(如 UTF-8),给定的 data 缓冲区的末尾有可能是一个不完整的多字节字符。在这种情况下,Response.Body.Data 可能会丢失最后一个字符,直到下一次调用 putData 才补全。
此方法可覆盖 putData。如果您实现此使用程序的子类,并希望在进行字符集转换之前检查原始字节,则可以覆盖此方法,检查 data,更改 Charset 属性(如有必要),然后将 data 传递给此超类方法进行转换并存储在 Response.Body.Data 中。如果您在已经调用 putData 处理先前的缓冲区之后再更改 Charset,请注意,位于上一个缓冲区末尾尚未转换的不完整多字节字符可能会丢失。如果以前收到的所有字符均为单字节(例如,US-ASCII,或者 UTF-8 的 ASCII 子集),则不会发生这种情况。
更有可能的情况是,您希望在进行字符集转换后,在收到每个数据缓冲区的同时对它进行检查。要实现此目的,请按如下所示覆盖此方法(无论 TextType 是 char 还是 string 都适用):
function [len, stop] = putData(obj, data)
oldLength = obj.CurrentLength;
% send raw bytes to StringConsumer for conversion
[len, stop] = obj.putData@matlab.net.http.io.StringConsumer(data);
newData = obj.Response.Body.Data.extractAfter(oldLength);
% ...process newData...现在 newData 包含转换后最近添加的数据。请注意,上述模式仍将结果字符串存储在 Response.Body.Data 中。
如果您的子类要在处理完字符串后将自己的结果以流方式传输到响应中,请使用 convert 方法根据此对象中的 TextType 和 Charset 转换您的数据。在这种情况下,只在数据末尾使用空参量调用 putData 方法。
输入参数
输出参量
属性
Access | public |
示例
有关子类化此方法的示例,请参阅Display Streamed Data in Figure Window中的 PricesStreamer 类的 putData 方法。
版本历史记录
在 R2018a 中推出