主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

matlab.net.http.io.MultipartConsumerクラス

パッケージ:matlab.net.http.io
スーパークラス:matlab.net.http.io.GenericConsumer

HTTPメッセージ内のマルチパートコンテンツタイプのヘルパー

说明

このコンシューマーはマルチパートHTTP応答メッセージを处理します。マルチパートメッセージは,その内容类型ヘッダーフィールドに“扇形”が指定されていて,本文には1つ以上の部分が含まれているものです。各部分には,部分を記述する独自のヘッダーフィールドのセットが含まれていますが,それらで最も重要なものは- typeフィールドです。

matlab.net.http.io.MultipartConsumerクラスは处理クラスです。

サブクラスの作成

独自のContentConsumerを作成している場合,これが最上位のコンシューマー(RequestMessage.sendメソッドの3番目の引数として指定されている)でもマルチパートメッセージのパート(MultipartConsumerコンストラクターの呼び出しの “デリゲート” として指定されている场合)でも机能します。MultipartConsumerにより,各デリゲートが応答メッセージ全体を処理しているように見えますが,実際には,結果を組み立てて,返されたresponse.Body.Dataプロパティに格納されるResponseMessagesの配列に設定しています。

次に,MultipartConsumerの動作について説明します。

このMultipartConsumerがサーバーから完全なメッセージのパートを受信する場合,このパート内にヘッダーがあれば,これを解析して,このパート内の- typeフィールドに適したデリゲートコンシューマーを呼び出します。このパートに- typeフィールドがない場合,タイプは文本/平原であると想定されます。このタイプを処理できるデリゲートがない場合、GenericConsumerの记述に従って,Content-Type的に基づいてパートの既定の处理を使用します。

MultipartConsumerは,完全なパートを受信するまでデリゲートを呼び出しません。MultipartConsumerは,パートのデータをバッファーして,パートの受信の最後には,ContentConsumerの表示されているプロパティすべてをこのコンシューマーからデリゲートにコピーします。デリゲートの响应。身体をクリアし,デリゲートのをパートのヘッダーに設定してから,デリゲートの初始化メソッドおよび开始メソッドを呼び出します。その后,パートのペイロードを含むデリゲートのputDataメソッドが1回以上呼び出され,データ終了を示すputData (uint8.empty)の呼び出しが続きます。デリゲートの初始化メソッドが,パートを处理しないことを示すために错误的を返す場合,パートのペイロードは,GenericConsumerの記述に従って,パートの- typeの既定の動作を使用して処理されます。

デリゲートの开始メソッドが,目的の最大バッファーサイズがないことを示すために[]を返す場合,MultipartConsumerは,パートのペイロード全体を提供するputDataへの呼び出しを一度だけ行い,データ終了呼び出しが続きます。それ以外の場合は,バッファーサイズの単位内のペイロード全体を提供するために十分な回数putDataを呼び出します。

デリゲートのputDataメソッドが,さらにデータを必要としないことを示すために停止戻り値を真的に设定する场合,MultipartConsumerはメッセージが终了していたかのように転送を终了するために接続を闭じます。このように,デリゲートは元のメッセージの残りを处理するかどうかを制御します。putData[]尺寸を返す場合,メッセージも終了しますが,RequestMessage.sendの呼び出し元に例外がスローされます。

パートのコンシューマーがContentConsumerインスタンスではなく关数ハンドルとして指定されている场合,关数はコンシューマーが最初に必要になったときにのみ呼び出され,同じ応答メッセージの后続の该当するパートに対してはいずれも同じコンシューマーインスタンスが使用されます。关数ハンドルで处理されたパートについては,关数からはResponseMessageの本文にアクセスできないため,Response.Body.Dataの対応するResponseMessageにパートのヘッダーのみが格納されます。

デリゲートされたコンシューマーはMyDelegatorプロパティを通してこのコンシューマーとそのプロパティにアクセスできますが,この处理が必要になることはほとんどありません。

作成

说明

消费= MultipartConsumer(类型消费者的)MultipartConsumerを構築し,対応する消费者を使用して指定された类型を処理します。引数ペアは,types1,consumer1,...,typesN,consumerNのように任意の順序で複数指定できます。MATLAB®类型を出現する順序で検索し,最初に一致するものを使用します。指定されたタイプに一致するものがない場合,MATLABはコンシューマーの既定のセットを使用しますが,これはタイプによって異なります。

消费= MultipartConsumer(puthandle的)は,このコンシューマーのputDataメソッドの呼び出しごとにputhandleによって指定される关数を呼び出すContentConsumerを構築します。

入力引数

すべて展開する

コンテンツタイプ。串配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。类型は,构文“类型/子类型”を使用してコンテンツタイプを指定します。詳細については,matlab.net.http.io.GenericConsumerを参照してください。

コンテンツコンシューマー。指定されたタイプを处理できるmatlab.net.http.io.ContentConsumerオブジェクト,またはこれらのタイプを処理できるContentConsumerを返す関数へのハンドルとして指定します。

次のContentConsumer.putData构文をもつ关数putDataへのハンドル。

(长度、停止)= putData(数据)

数据uint8配列であり长度はその配列の長さです。

この构文を使用して,サーバーが返すデータ型がわかっている场合に,1つの关数を使用してサーバーからのすべての入力を处理します。关数は,ResponseMessageまたはこのコンシューマーに関する情報にはアクセスできません。

プロパティ

すべて展開する

パブリックプロパティ

最初の境界区切り记号までのマルチパートメッセージのパート(存在する场合)。uint8として指定します。コンシューマーは,デリゲートの开始メソッドを呼び出す前に序言を设定します。一度设定されると,序言値が変更されることはありません。

属性:

GetAccess
公共
SetAccess
私人的

最後の境界区切り記号(存在する場合)に続くマルチパートメッセージの一部。uint8として指定します。メッセージが终了するときは,デリゲートへのすべての呼び出しの后で,コンシューマーは后记を设定します。メッセージの终了前にデリゲートが転送を停止する场合,これは设定されません。転送の完了后(たとえば,RequestMessage.sendが返すときなど)に,このプロパティを确认できます。

属性:

GetAccess
公共
SetAccess
私人的

推奨されるバッファーサイズ。uint64として指定されます。AllocationLengthは,MATLABにより,putDataに渡されるデータの予测されるバッファーサイズに设定されます。実际のサイズは,これよりも小さくなることも大きくなることもあります。パフォーマンスを向上させるために,この値を使用して,コンシューマーでデータを处理するためのスペースを事前に割り当てることができます。

このプロパティは,サブクラスで利用できるように,开始メソッドを呼び出す前にMATLABで设定されます。

属性:

GetAccess
公共
SetAccess
公共

想定されるペイロードの長さ。uint64として指定されます。このプロパティは通常,プロパティにおけるmatlab.net.http.field.ContentLengthField价值プロパティになります。

ContentLengthが空の場合,長さは不明です。ペイロードはputData (uint8.empty)が呼び出された時点で終了します。

このプロパティは,サブクラスでデータの长さを确认できるように,初始化を呼び出す前にMATLABで設定されます。

このContentConsumerが最上位のコンシューマーのデリゲートである場合,ContentLengthの値が最上位のコンシューマーのContentLengthと异なる値になることがあります。

例:numel(someData)。ここで,someDatauint8型です。

属性:

GetAccess
公共
SetAccess
公共

ペイロードのメディアタイプ。matlab.net.http.MediaTypeオブジェクトとして指定します。このプロパティは通常,プロパティにおけるmatlab.net.http.field.ContentTypeField价值プロパティになります。ContentTypeプロパティが空の場合,ContentTypeFieldは空または存在しません。

このプロパティは,サブクラスでMediaTypeを確認できるように,初始化を呼び出す前にMATLABで設定されます。データから別のMediaTypeであることがわかった场合は,サブクラスでこのプロパティを设定できます。

この値は,転送の終了時にMATLABによってResponse.Body.ContentTypeプロパティにコピーされます。

例:“应用程序/八位字节流”

属性:

GetAccess
公共
SetAccess
公共

現在処理中のペイロードのヘッダー。matlab.net.http.HeaderFieldオブジェクトとして指定されます。

コンシューマーは,このヘッダーを使用して,送られてくるペイロードの处理方法を决定します。最上位のコンシューマーの场合,この値は响应。头と同じになります。デリゲートの場合は値が異なることがあります。たとえば、MultipartConsumerで处理されるマルチパートメッセージの场合は,そのデリゲートで处理中のパートのヘッダーになります。デリゲートは引き続き响应。头で元のメッセージのヘッダーを确认できます。

このプロパティは,サブクラスで利用できるように,初始化を呼び出す前にMATLABで設定されます。

属性:

GetAccess
公共
SetAccess
公共

送信が完了したRequestMessagematlab.net.http.RequestMessageオブジェクトとして指定します。これは,すべてのリダイレクトが完了した最终的なRequestMessageであり,发送メソッドからのcompletedrequest戻り値です。

このプロパティは,サブクラスで利用できるように,初始化を呼び出す前にMATLABで設定されます。

属性:

GetAccess
公共
SetAccess
公共

处理中のResponseMessagematlab.net.http.ResponseMessageオブジェクトとして指定します。

响应プロパティは,初始化を呼び出す前にMATLABで設定されます。この値は,ヘッダーの受信まで完了し、ペイロードを受信する前のResponseMessageになります。応答メッセージの処理の開始時(マルチパートメッセージの場合はパートの開始時)に,ResponseMesssage.Bodyプロパティは,数据プロパティと有效载荷プロパティが空の邮件正文オブジェクトになります。受信したデータを格納するために,コンシューマーはデータ転送中に响应プロパティとMessageBody。数据プロパティを変更できます。通常,コンシューマーはデータセットResponse.Body.Dataを処理してから処理済みのペイロードに格納しますが,これは必須ではありません。転送が完了すると,この响应がMATLABから发送の呼び出し元に返されます。响应状态栏などの他のプロパティは,コンシューマーで変更しないでください。これらを変更した場合,その変更が发送の呼び出し元に返されます。

Response.Body.Payloadプロパティは転送中は空であり,コンシューマーで変更してはなりません。HTTPOptions。SavePayloadプロパティが設定されると,次にMATLABは,メッセージまたはパートの転送終了時(putData (uint8.empty)の呼び出し后),または例外の発生时に,受信したペイロードに有效载荷を設定します。

メッセージの处理中にコンシューマーで例外が発生した场合は,MATLABからHTTPExceptionオブジェクトがスローされます。历史プロパティにはこの响应値が含まれます。

コンシューマーがマルチパートメッセージのパートを处理するデリゲートの场合,响应。头にメッセージ全体のヘッダーが格纳され,各パートのContentConsumerを呼び出す前に响应。身体有效载荷プロパティと数据プロパティがクリアされます。各パートの最後で,元の応答の的身体。数据にあるResponseMessageオブジェクトの配列の末尾に,このオブジェクトのおよびこのプロパティの身体を含む,新しいResponseMessageが追加されます。次のデリゲートでは、前のデリゲートの邮件正文ではなく空の邮件正文を含む新规の响应が确认されます。

属性:

GetAccess
公共
SetAccess
公共
依赖
真的

処理中の要求の送信先。matlab.net.URIオブジェクトとして指定されます。この値は,发送で決定される元の送信先URIの値になります。プロキシのURIやリダイレクト後の最終的なURIではありません。

このプロパティは,サブクラスで利用できるように,初始化を呼び出す前にMATLABで設定されます。

属性:

GetAccess
公共
SetAccess
公共

保护プロパティ

デリゲートのputDataメソッド。关数ハンドルとして指定するか,CurrentDelegateが设定されている场合は[]として指定します。

属性:

GetAccess
保护
SetAccess
保护

データを追加するためにputDataメソッドで呼び出される関数。关键词として指定されます。このクラスのputDataメソッドは,数据引数で受け取ったデータを応答メッセージの既存のデータに追加するために关数AppendFcnを呼び出します。この关数のシグネチャは次のとおりでなければなりません。

AppendFcn(消费者,newdata)

newdataconsumer.Response.Body.Dataの配列に追加されるデータです。このメソッドは,数据の新しい长さに合わせて消费者。CurrentLengthを更新する必要があります。newdataが空の场合はストリームの末尾を示し,关数によりResponse.Body.Dataが最終的な値に更新されます。

既定の動作では,このプロパティが空の場合,数据を任意の値の配列として扱う,关数horzcatに対応した内部関数が使用されます。この关数では、スペースを事前に割り当てることで効率的にnewdataが追加され,格纳されたデータの実际の长さがCurrentLengthに反映されます。メッセージの最後に,Response.Body.DataCurrentLengthの値までで切り舍てられます。

horzcatが追加处理に适さない场合は,このプロパティをサブクラスで変更できます。たとえば,StringConsumerでスカラー字符串を作成する場合は,字符串への追加に関数horzcatではなく关数を使用することがあります。

データを追加するContentConsumer.putDataを呼び出さない场合やデータを追加する际のhorzcatの動作に問題がない場合は,サブクラスでこのプロパティを無視することができます。

例:@customAppend@customAppendはコンシューマーによって定义されます。

属性:

GetAccess
保护
SetAccess
保护

このコンシューマーによるデリゲート先のContentConsumermatlab.net.http.io.ContentConsumerオブジェクトとして指定します。呼び出し元のコンシューマー(デリゲーター)のdelegateToメソッドによってCurrentDelegateプロパティが設定されます。現在のデリゲーションがない場合,値は[]です。

MATLABは初始化を呼び出す前にCurrentDelegate[]に設定します。

属性:

GetAccess
保护
SetAccess
保护

Response.Body.Dataプロパティの現在のデータの長さ。uint64として指定されます。

このプロパティは,Response.Body.Dataに事前に割り当てられたサイズが現在格納されている実際のデータの量よりも大きい場合に,格納されているデータの長さを示すために使用されます。このプロパティが空の場合は,すべてのResponse.Body.Dataにデータが格纳されているか,ContentConsumerサブクラスでResponse.Body.Dataに格納する以外の何らかの方法でデータが破棄されていることを示します。

このプロパティは,この基底クラスのputDataメソッドで,AppendFcnプロパティが空の场合に使用および设定されます。putDataを呼び出すサブクラスで既に格納されているデータを確認したり,AppendFcnの任意の実装でResponse.Body.Dataに结果を反映したりするのに使用できます。

putDataを使用するサブクラスでは,このプロパティを変更してデータが格纳されるバッファーの位置をリセットすることもできます。たとえば,既定の关数AppendFcnを使用している場合,putDataの呼び出しごとにすべてのResponse.Body.Dataを処理するサブクラスで元のデータが不要になったときは,CurrentLengthプロパティを1にリセットすることで次のputDataの呼び出し時に新しいデータでバッファーを上書きできます。新しいデータの末尾を越えてバッファーの要素をクリアする必要はありません。

putDataを呼び出さないサブクラスでは,このプロパティを独自のデータの追迹に使用できます。使用しない场合は未设定(空)のままにしておいてかまいません。ここで设定できる値に关して,MATLABにはいかなる制约もありません。また,この値は,既定のAppendFcnでデータの次のバッファーを格纳する位置とメッセージの末尾のデータを切り舍てる位置を特定するためにのみ使用され,それ以外の目的には使用されません。データが切り舍てられないようにするには,putData (uint8.empty)の最后の呼び出しの前にこのプロパティを空に设定します。

このプロパティは,初始化の各呼び出しの前にMATLABで空に设定されます。

属性:

GetAccess
保护
SetAccess
保护

このコンシューマーのデリゲート元のContentConsumermatlab.net.http.io.ContentConsumerオブジェクトとして指定されます。このコンシューマーがGenericConsumerMultipartConsumerなどの别のコンシューマーから呼び出されたデリゲートである场合,これは呼び出し侧のコンシューマーを示します。发送の呼び出しで指定された最上位のコンシューマーの场合は空になります。

デリゲートは,このプロパティを使用してデリゲーターのプロパティにアクセスし,デリゲート元のコンシューマーなどを确认できます。

属性:

GetAccess
保护
SetAccess
保护

メソッド

すべて展開する

详细

すべて展開する

R2018aで導入