

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# `ContentStreamProvider` で を実装する AWS SDK for Java 2.x
<a name="content-stream-provider"></a>

`ContentStreamProvider` は、入力データの複数の読み取りを可能にする AWS SDK for Java 2.x ために で使用される抽象化です。このトピックでは、アプリケーションに `ContentStreamProvider` を正しく実装する方法について説明します。

SDK for Java 2.x は、ストリーム全体を読み取る必要があるたびに `ContentStreamProvider#newStream()` メソッドを使用します。ストリーム全体でこれを使用するには、返されるストリームが常にコンテンツの先頭にあり、同じデータが含まれている必要があります。

以下のセクションでは、この動作を正しく実装するための 3 つのアプローチを示します。

## `mark()` および `reset()` を使用します。
<a name="csp-impl-mark-reset"></a>

以下の例では、ストリームを最初に戻すことができるように、読み取りを開始する前にコンストラクタで `mark(int)` を使用します。`newStream()` の呼び出しごとに、ストリームをリセットします。

```
public class MyContentStreamProvider implements ContentStreamProvider {  
    private InputStream contentStream;  
  
    public MyContentStreamProvider(InputStream contentStream) {  
        this.contentStream = contentStream;  
        this.contentStream.mark(MAX_LEN);  
    }  
  
    @Override  
    public InputStream newStream() {  
        contentStream.reset();  
        return contentStream;  
    }  
}
```

## `mark()` と `reset()` が利用できない場合にバッファリングを使用する
<a name="csp-impl-unsupported-streams"></a>

 ストリームが `mark()` と `reset()` を直接サポートしていない場合でも、最初に `BufferedInputStream` でストリームをラッピングすることで、前述のソリューションを使用できます。

```
public class MyContentStreamProvider implements ContentStreamProvider {  
    private BufferedReader contentStream;  
  
    public MyContentStreamProvider(InputStream contentStream) {  
        this.contentStream = new BufferedInputStream(contentStream);  
        this.contentStream.mark(MAX_LEN);
    }  
  
    @Override  
    public InputStream newStream() {  
        contentStream.reset();  
        return contentStream;  
    }  
}
```

## 新しいストリームを作成する
<a name="csp-impl-new-stream"></a>

より簡単な方法は、単に呼び出しごとにデータへの新しいストリームを取得し、前のストリームを閉じることです。

```
public class MyContentStreamProvider implements ContentStreamProvider {  
    private InputStream contentStream;  
  
    @Override  
    public InputStream newStream() {  
        if (contentStream != null) {  
            contentStream.close();  
        }  
        contentStream = openStream();  
        return contentStream;  
    }  
}
```