matlab.net.http.io.GenericConsumer クラス
名前空間: matlab.net.http.io
スーパークラス: matlab.net.http.io.ContentConsumer
HTTP メッセージの複数のコンテンツ タイプのコンシューマー
説明
サーバーによって返されるタイプを事前に予測できないときに、このコンシューマーを使用して複数のコンテンツ タイプのストリーミングを処理します。
matlab.net.http.io.GenericConsumer
クラスは handle
クラスです。
作成
説明
consumer = GenericConsumer
は既定のコンシューマーを使用して GenericConsumer
を作成します。
consumer = GenericConsumer(
は、このコンシューマーの puthandle
)putData
メソッドの呼び出しごとに puthandle
によって指定される関数を呼び出す ContentConsumer
を構築します。
入力引数
コンテンツ タイプ。string 配列、文字ベクトルまたは文字ベクトルの cell 配列として指定します。types
は、構文 "type/subtype"
を使用してコンテンツ タイプを指定します。
types
の各要素のタイプ コンポーネントとサブタイプ コンポーネントは正規表現として扱われ、応答の ContentTypeField
のタイプ/サブタイプと照合されます。その際、タイプまたはサブタイプに指定された単独の '*' は任意のタイプまたはサブタイプに一致し、すべての検索で文字列開始位置と文字列終了位置の両端に固定されます。以下に例を示します。
タイプ/サブタイプ | 一致するもの |
---|---|
text/* | タイプ 'text' と任意のサブタイプ |
*/.*json.* | 任意のタイプと 'json' が含まれるサブタイプ |
*/.*json | 任意のタイプと 'json' で終わるサブタイプ |
*/* | 任意のタイプまたはサブタイプ |
サブタイプが '*'
である場合、末尾の '/*'
を省略することができます。text
は 'text/*'
と同じです。
types
は、表示される順番に検索され、最初に一致するものが使用されます。指定されたタイプの中に一致するものがない場合は、タイプに応じて、既定のコンシューマー セットが次の順番で使用されます。
タイプ/サブタイプ | 既定のコンシューマー |
---|---|
multipart/* | MultipartConsumer |
image/* | ImageConsumer |
.*/.*json.* | JSONConsumer |
*/* | StringConsumer |
*/* | BinaryConsumer |
StringConsumer
と BinaryConsumer
の両方が任意のタイプで使用されますが、StringConsumer
が受け入れるタイプは charset を特定できるタイプのみであり、text/*
、charset 属性をもつ任意のタイプ、あるいは MATLAB によって文字ベースであると認識されているいずれかのタイプ ("application/xml"
や "application/javascript"
など) として指定します。StringConsumer
がタイプを棄却した場合、BinaryConsumer
がそのタイプを受け入れ、未変換のペイロードを Response.Body.Data
に uint8
ベクトルとして格納します。
このコンシューマーがこの検索条件に基づいて一致するデリゲートを選択すると、デリゲートの initialize
メソッドが呼び出され、デリゲートがそのペイロードを受け入れるかどうかが確認されます。デリゲートが受け入れないことを示す false
がメソッドから返された場合、このコンシューマーは引き続きリストを検索し、一致する次のデリゲートを見つけます。
コンテンツ コンシューマー。指定されたタイプのいずれかを処理できる matlab.net.http.io.ContentConsumer
オブジェクト、またはこれらのタイプを処理できる ContentConsumer
を返す関数へのハンドルとして指定します。
次の ContentConsumer.putData
構文をもつ関数へのハンドル。
[length,stop] = putData(data)
data
は uint8
の配列、length
はその配列の長さです。
この構文を使用して、サーバーが返すデータ型がわかっている場合に、1 つの関数を使用してサーバーからのすべての入力を処理します。関数は、ResponseMessage
またはこのコンシューマーに関する情報にはアクセスできません。
プロパティ
パブリック プロパティ
想定されるペイロードの長さ。uint64
として指定されます。このプロパティは通常、Header
プロパティにおける matlab.net.http.field.ContentLengthField
の Value
プロパティになります。
ContentLength
が空の場合、長さは不明です。ペイロードは putData(uint8.empty)
が呼び出された時点で終了します。
このプロパティは、サブクラスでデータの長さを確認できるように、initialize
を呼び出す前に MATLAB で設定されます。
この ContentConsumer
が最上位のコンシューマーのデリゲートである場合、ContentLength
の値が最上位のコンシューマーの ContentLength
と異なる値になることがあります。
例: numel(someData)
。ここで、someData
は uint8
型です。
属性:
GetAccess | public |
SetAccess | public |
ペイロードのメディア タイプ。matlab.net.http.MediaType
オブジェクトとして指定します。このプロパティは通常、Header
プロパティにおける matlab.net.http.field.ContentTypeField
の Value
プロパティになります。ContentType
プロパティが空の場合、ContentTypeField
は空または存在しません。
このプロパティは、サブクラスで MediaType
を確認できるように、initialize
を呼び出す前に MATLAB で設定されます。データから別の MediaType
であることがわかった場合は、サブクラスでこのプロパティを設定できます。
この値は、転送の終了時に MATLAB によって Response.Body.ContentType
プロパティにコピーされます。
例: 'application/octet-stream'
属性:
GetAccess | public |
SetAccess | public |
現在処理中のペイロードのヘッダー。matlab.net.http.HeaderField
オブジェクトとして指定されます。
コンシューマーは、このヘッダーを使用して、送られてくるペイロードの処理方法を決定します。最上位のコンシューマーの場合、この値は Response.Header
と同じになります。デリゲートの場合は値が異なることがあります。たとえば、MultipartConsumer
で処理されるマルチパート メッセージの場合は、そのデリゲートで処理中のパートのヘッダーになります。デリゲートは引き続き Response.Header
で元のメッセージのヘッダーを確認できます。
このプロパティは、サブクラスで利用できるように、initialize
を呼び出す前に MATLAB で設定されます。
属性:
GetAccess | public |
SetAccess | public |
送信が完了した RequestMessage
。matlab.net.http.RequestMessage
オブジェクトとして指定します。これは、すべてのリダイレクトが完了した最終的な RequestMessage
であり、send
メソッドからの completedrequest
戻り値です。
このプロパティは、サブクラスで利用できるように、initialize
を呼び出す前に MATLAB で設定されます。
属性:
GetAccess | public |
SetAccess | public |
処理中の ResponseMessage
。matlab.net.http.ResponseMessage
オブジェクトとして指定します。
Response
プロパティは、initialize
を呼び出す前に MATLAB で設定されます。この値は、ヘッダーの受信まで完了し、ペイロードを受信する前の ResponseMessage
になります。応答メッセージの処理の開始時 (マルチパート メッセージの場合はパートの開始時) に、ResponseMesssage.Body
プロパティは、Data
プロパティと Payload
プロパティが空の MessageBody
オブジェクトになります。受信したデータを格納するために、コンシューマーはデータ転送中に Response
プロパティと MessageBody.Data
プロパティを変更できます。通常、コンシューマーはデータセット Response.Body.Data
を処理してから処理済みのペイロードに格納しますが、これは必須ではありません。転送が完了すると、この Response
が MATLAB から send
の呼び出し元に返されます。Response
の Header
や StatusLine
などの他のプロパティは、コンシューマーで変更しないでください。これらを変更した場合、その変更が send
の呼び出し元に返されます。
Response.Body.Payload
プロパティは転送中は空であり、コンシューマーで変更してはなりません。HTTPOptions.SavePayload
プロパティが設定されると、次に MATLAB は、メッセージまたはパートの転送終了時 (putData(uint8.empty)
の呼び出し後)、または例外の発生時に、受信したペイロードに Payload
を設定します。
メッセージの処理中にコンシューマーで例外が発生した場合は、MATLAB から HTTPException
オブジェクトがスローされます。History
プロパティにはこの Response
値が含まれます。
コンシューマーがマルチパート メッセージのパートを処理するデリゲートの場合、Response.Header
にメッセージ全体のヘッダーが格納され、各パートの ContentConsumer
を呼び出す前に Response.Body
の Payload
プロパティと Data
プロパティがクリアされます。各パートの最後で、元の応答の Body.Data
にある ResponseMessage
オブジェクトの配列の末尾に、このオブジェクトの Header
およびこのプロパティの Body
を含む、新しい ResponseMessage
が追加されます。次のデリゲートでは、前のデリゲートの MessageBody
ではなく空の MessageBody
を含む新規の Response
が確認されます。
属性:
GetAccess | public |
SetAccess | public |
Dependent | true |
処理中の要求の送信先。matlab.net.URI
オブジェクトとして指定されます。この値は、send
で決定される元の送信先 URI の値になります。プロキシの URI やリダイレクト後の最終的な URI ではありません。
このプロパティは、サブクラスで利用できるように、initialize
を呼び出す前に MATLAB で設定されます。
属性:
GetAccess | public |
SetAccess | public |
保護プロパティ
デリゲートの putData
メソッド。関数ハンドルとして指定するか、CurrentDelegate
が設定されている場合は []
として指定します。
このプロパティは delegateTo
によって設定されます。サブクラスはそれぞれの putData
メソッドでこの関数を呼び出し、データをデリゲートに送信するか、uint8.empty
を送信してデータのデリゲートの部分を終了しなければなりません。
[len, stop] = obj.PutMethod(data);
メッセージの最後で、任意のデリゲートに対する上記の呼び出しでメッセージを終了した後、サブクラスは PutMethod
を空に設定し、それぞれのスーパークラスで呼び出し putData(uint8.empty)
を起動して、メッセージが終了したことをこのクラスが認識するようにしなければなりません。この putData
呼び出しは PutMethod
を空のままにするか、コンストラクターに渡された puthandle
引数に戻します。
属性:
GetAccess | protected |
SetAccess | protected |
Dependent | true |
データを追加するために putData
メソッドで呼び出される関数。関数ハンドルとして指定されます。このクラスの putData
メソッドは、data
引数で受け取ったデータを応答メッセージの既存のデータに追加するために関数 AppendFcn
を呼び出します。この関数のシグネチャは次のとおりでなければなりません。
AppendFcn(consumer,newdata)
newdata
は、consumer.Response.Body.Data
の配列に追加されるデータです。このメソッドは、Data
の新しい長さに合わせて consumer.CurrentLength
を更新する必要があります。newdata
が空の場合はストリームの末尾を示し、関数により Response.Body.Data
が最終的な値に更新されます。
既定の動作では、このプロパティが空の場合、Data
を任意の値の配列として扱う、関数 horzcat
に対応した内部関数が使用されます。この関数では、スペースを事前に割り当てることで効率的に newdata
が追加され、格納されたデータの実際の長さが CurrentLength
に反映されます。メッセージの最後に、Response.Body.Data
が CurrentLength
の値までで切り捨てられます。
horzcat
が追加処理に適さない場合は、このプロパティをサブクラスで変更できます。たとえば、StringConsumer
でスカラー string を作成する場合は、string への追加に関数 horzcat
ではなく関数 plus
を使用することがあります。
データを追加する ContentConsumer.putData
を呼び出さない場合やデータを追加する際の horzcat
の動作に問題がない場合は、サブクラスでこのプロパティを無視することができます。
例: @customAppend
。@customAppend
はコンシューマーによって定義されます。
属性:
GetAccess | protected |
SetAccess | protected |
このコンシューマーによるデリゲート先の ContentConsumer
。matlab.net.http.io.ContentConsumer
オブジェクトとして指定します。呼び出し元のコンシューマー (デリゲーター) の delegateTo
メソッドによって CurrentDelegate
プロパティが設定されます。現在のデリゲーションがない場合、値は []
です。
MATLAB は initialize
を呼び出す前に CurrentDelegate
を []
に設定します。
属性:
GetAccess | protected |
SetAccess | protected |
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)
の最後の呼び出しの前にこのプロパティを空に設定します。
このプロパティは、initialize
の各呼び出しの前に MATLAB で空に設定されます。
属性:
GetAccess | protected |
SetAccess | protected |
このコンシューマーのデリゲート元の ContentConsumer
。matlab.net.http.io.ContentConsumer
オブジェクトとして指定されます。このコンシューマーが GenericConsumer
や MultipartConsumer
などの別のコンシューマーから呼び出されたデリゲートである場合、これは呼び出し側のコンシューマーを示します。send
の呼び出しで指定された最上位のコンシューマーの場合は空になります。
デリゲートは、このプロパティを使用してデリゲーターのプロパティにアクセスし、デリゲート元のコンシューマーなどを確認できます。
属性:
GetAccess | protected |
SetAccess | protected |
メソッド
initialize | 新しい HTTP ペイロードのためのコンシューマーを準備 |
start | GenericConsumer へのデータ転送を開始 |
putData | GenericConsumer のデータの次のバッファーを保存 |
delegateTo | 別のコンシューマーへのデリゲート |
詳細
バージョン履歴
R2018a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)