UploadDataProvider

public abstract class UploadDataProvider implements Closeable


エンベッダーが UrlRequest にアップロード本文を提供できるようにする抽象クラス。チャンク化されていないアップロード(サイズが事前にわかっている)とチャンク化されたアップロード(サイズが事前にわからない)の両方をサポートしています。すべてのサーバーがチャンク アップロードをサポートしているわけではありません。

アップロードは、データが複数回送信される場合は複数のアップロードにわたって常にチャンク化されるか、チャンク化されないかのいずれかです。

概要

パブリック コンストラクタ

パブリック メソッド

void

この UploadDataProvider がリクエストで不要になったときに呼び出され、リソース(ファイルなど)を明示的に解放できるようにします。

abstract long

チャンク化されていないアップロードの場合、アップロードの長さを返します。

abstract void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

アップロード データを byteBuffer に読み取ります。

abstract void
rewind(UploadDataSink uploadDataSink)

アップロード データを先頭に戻します。

パブリック コンストラクタ

UploadDataProvider

public UploadDataProvider()

パブリック メソッド

閉じる

public void close()

この UploadDataProvider がリクエストで不要になったときに呼び出され、リソース(ファイルなど)を明示的に解放できるようにします。

例外
java.io.IOException

プロセス中に IOException が発生した場合は、リクエストがまだ完了していない場合は、リクエストが失敗します。完了している場合は、ログに記録されます。

getLength

public abstract long getLength()

チャンク化されていないアップロードの場合、アップロードの長さを返します。チャンク アップロードの場合は、常に -1 を返す必要があります。

戻り値
long

チャンク化されていないアップロードのアップロードの長さ。それ以外の場合は -1。

例外
java.io.IOException

プロセス中に IOException が発生した場合。

read

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

アップロード データを byteBuffer に読み取ります。完了すると、バッファの位置が読み取られたバイトの末尾に更新されます。バッファの上限は変更されません。このメソッドの各呼び出しの後に、 uploadDataSink: 成功の場合は onReadSucceeded、失敗の場合は onReadError への同期または非同期の単一呼び出しが続いている必要があります。これらのメソッドのいずれかが呼び出されるまで、読み取りも巻き戻しも呼び出されません。関連付けられた UrlRequest がキャンセルされた場合でも、リソースを安全に解放する前に、どちらか一方を呼び出す必要があります。例外をスローすると、リソースが解放され、リクエストがエラーになります。

注: チャンク化されていないアップロードの場合、読み取りが成功し、少なくとも 1 バイトが byteBuffer に読み取られた場合にのみ onReadSucceeded を呼び出す必要があります。チャンク アップロード(データのサイズが不明)の場合、空のバイトバッファを使用して最後のチャンクに対して onReadSucceeded を呼び出すことができます。

パラメータ
UploadDataSink uploadDataSink

読み取りが完了したときに通知するオブジェクト。

ByteBuffer byteBuffer

読み取ったバイトをコピーするバッファ。byteBuffer の上限は変更しないでください。

例外
java.io.IOException

プロセス中に IOException が発生した場合は、onFailed は、スローされた例外が CallbackException の原因として設定された状態で呼び出されます。

巻き戻し

public abstract void rewind(UploadDataSink uploadDataSink)

アップロード データを先頭に戻します。Cronet がアップロード データ プロバイダを read がまだ呼び出されていない状態と同等の状態にする必要がある場合に呼び出されます。

オペレーションが完了したことを通知するには、この関数の実装で onRewindSucceeded を呼び出して成功を示すか、失敗時に onRewindError を呼び出す必要があります。関連付けられた UrlRequest がキャンセルされた場合でも、リソースを安全に解放する前に、どちらか一方を呼び出す必要があります。メソッドから例外をスローすることは、onRewindError を呼び出すことと同じです。巻き戻しがサポートされていない場合(1 回限りのストリームから読み取っている場合など)は、すぐに onRewindError を呼び出す必要があります。

実装者は、前の段落で説明したように、巻き戻しが完了したことをシンクに通知するまで、read も同時実行の rewind 呼び出しも発行されないと安全に想定できます。

このメソッドは、本文を複数回アップロードする必要がある場合に Cronet によって内部的に使用されます。これは、リダイレクトをたどる場合や、タイムアウトやネットワークの切断後にリクエストを再試行する場合など、さまざまな状況で発生する可能性があります。巻き戻しの実装は通常は任意ですが、巻き戻しが必要になるリクエストでは、巻き戻しが実装されていないと失敗します。

パラメータ
UploadDataSink uploadDataSink

巻き戻しオペレーションが成功または失敗したときに通知するオブジェクト。

例外
java.io.IOException

プロセス中に IOException が発生した場合は、onFailed は、スローされた例外が CallbackException の原因として設定された状態で呼び出されます。