主要内容

putData

类:matlab.net.http.io.ContentConsumer
包:matlab.net.http.io

处理或保存ContentConsumer的下一个数据缓冲区

语法

(大小、停止)= putData(消费者,数据)

描述

大小停止) = putData (消费者数据提供的缓冲区数据从服务器读取到消费者

MATLAB®调用putData.子类消费者可以重写此方法以接收流数据。您的消费者应该返回它实际处理的数据长度大小,以及在停止指定是否希望从该消息接收更多数据。

当MATLAB调用putData空着数据参数时,表示在多部分消息的情况下,消息或消息部分已经结束。

如果您创建实现此方法的消费者的子类,则您的putData方法可以调用它的父类putData利用父类实现的任何转换或处理。

MATLAB限制的大小数据缓冲区的bufsize的返回值。开始方法或内部缓冲区大小bufsize[].此外,如果服务器发送一个块编码的消息,则给定调用putData从不提供超过一个块。这允许消费者以及时的方式获得缓慢到达的块,即使bufsize比块大小大得多。

默认的行为putData ()在这个基类中:

子类消费者可以选择将可能转换的内容直接存储到Response.Body.Data,或者逐渐地,或者一下子,或者以其他方式处理它。子类消费者不需要调用它putData方法来存储数据。为了方便起见,希望增量存储内容的消费者Response.Body.Data可以调用此方法来实现。这种方法附加数据Response.Body.Data使用AppendFcn,试图通过增量分配容量来有效地做到这一点。存储数据的实际长度保存在CurrentLength属性,它可以小于的实际长度Response.Body.Data.在传输结束时(例如,当putData(消费者,[])uint8.empty putData(消费者)被调用时,Response.Body.Data被截断CurrentLength.你可以自己定义AppendFcn实现一个可选的append方法。

默认情况下,此方法总是返回大小等于元素个数(数据)停止等于

如果您打算使用此方法存储数据,并且您知道要存储的数据的最大长度,那么您应该设置Response.Body.Data在第一次调用该方法之前,将其转换为一个用默认值(例如,0)填充的所需大小的向量。该方法在数据区域的开始处开始存储数据,然后将其截断为消息末尾的数据长度,保持存储在其中的数据长度CurrentLength

在基类中调用此方法以增量存储数据的消费者可以提供数据支持的任何类型金宝apphorzcatvertcat,包括结构和单元数组。如果提供单元格数组,则现有的Data将被转换为单元格数组(如果不是的话),并且单元格数组的元素将插入到现有的单元格数组中,其线性索引以CurrentLength+ 1。

如果你调用这个方法ContentConsumer为了存储数据,您应该让这个方法管理Response.Body.DataCurrentLength而不是直接修改它们。

ContentConsumers在超类中调用这个方法的人应该准备好做任何清理工作,比如在超类抛出异常时关闭窗口或删除临时文件。

输入参数

全部展开

内容使用者,指定为matlab.net.http.io.ContentConsumer对象。

原始数据的缓冲区matlab.net.http.ResponseMessage对象,指定为下列对象之一:

  • 非空的uint8vector -从服务器读取数据的正常缓冲区。

  • uint8.empty—数据结束。这是MATLAB表示响应消息已经结束的正常方式。这是指示使用者进行清理(例如,删除临时文件或将响应数据截断为当前长度),并为将来可能调用初始化后续消息做好准备。作为回应,消费者应该返回停止= true大小= 0指示处理成功,但未处理新字节。如果消费者退货大小= [],则消费者有一个问题,最终确定的数据和MATLAB抛出textbox回到呼叫的人RequestMessage.send

  • [](空双)-服务器,网络问题,或用户(使用Ctrl + C)中止了转移。一般来说,消费者应该完全按照实际情况进行清洁uint8.empty,但是一些消费者可能会删除任何已经接收到的不完整数据。在回来putData, MATLAB抛出textbox谁的历史。响应包含使用者存储在其中的任何数据响应财产。

大多数消费者并不在意两者的区别[]uint8.empty可以简单的检查isempty(数据)并适当清理。在任何情况下数据为空,则消费者必须调用其超类putData使用相同的空值,即使它们没有使用它们的父类putData存储数据,因为这是超类知道的唯一清理方法。在接收到空值数据,实现必须忽略后续的调用putData使用空值,直到下一次调用开始.通常情况下,他们应该返回停止= false大小= 0不执行任何额外的处理。

输出参数

全部展开

已处理数据的长度,返回为双精度或空双精度。如果大小是:

  • >= 0, Size <= length(数据)—字节数数据由调用处理putData.使用这个数字只是为了让这个消费者的子类知道处理了多少数据。这对未来的呼叫没有影响putData.如果数据是空的,然后大小将被忽略。

  • 大小< 0-结果abs(大小)处理的字节数。与前面的情况相同,但除此之外,MATLAB会安静地跳过数据的其余部分,对putData (uint8.empty)在数据的末尾。如果一个MultipartConsumer是不使用,这是类似于返回停止= true,除了额外的呼叫putData在最后。如果MultipartConsumer正被使用,是负值吗大小只结束该部分,而不影响消息后续部分的处理,因此连接不会关闭,直到到达下一个部分或消息结束。

  • 大小= [](空双引号)-消费者已经决定传输出了问题,从服务器的进一步传输应该被终止。这类似于停止= true,但它被认为是一个错误,导致了一个标准textbox被扔给召唤者RequestMessage.send指示使用者中止了连接。在这种情况下,调用者可以得到部分处理的唯一方法ResponseMessage是通过textbox。历史

    作为返回的替代选择大小= []要抛出一个标准异常,你的putData方法可以直接抛出它自己的异常,MATLAB将其包装为一个原因textbox返回给打电话的人RequestMessage.send

指示是否从此消息接收进一步的数据,指定为真正的.如果停止真正的,然后MATLAB停止处理消息的其余部分,包括正在处理的多部分消息的任何后续部分MultipartConsumer,即使消息中有更多的数据,也会像消息已经到达末尾一样静默地继续。这将立即关闭与服务器的连接,并且不会向调用者返回任何错误RequestMessage.send.这不是错误条件,而是正常终止接收任意长度流的方法。如果停止= true数据,则MATLAB对putData用空数据停止= true是否可以设置数据是空的。

消费者一般不应设置停止= true在结束时数据,因为如果它们是多部分委托,将终止对消息其余部分的处理。要仅终止对消息自己部分的处理,使用者应该返回大小< 0表示他们不希望接收更多的数据。

属性

访问 公共
介绍了R2018a