

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Implementasikan `ContentStreamProvider` di AWS SDK for Java 2.x
<a name="content-stream-provider"></a>

`ContentStreamProvider`adalah abstraksi yang digunakan AWS SDK for Java 2.x untuk memungkinkan beberapa pembacaan data input. Topik ini menjelaskan cara menerapkan dengan `ContentStreamProvider` benar untuk aplikasi Anda.

SDK for Java 2.x menggunakan `ContentStreamProvider#newStream()` metode ini setiap kali perlu membaca seluruh aliran. Agar ini berfungsi untuk seluruh aliran, aliran yang dikembalikan harus selalu berada di awal konten dan harus berisi data yang sama. 

Pada bagian berikut, kami menyediakan tiga pendekatan untuk bagaimana menerapkan perilaku ini dengan benar.

## Gunakan `mark()` dan `reset()`
<a name="csp-impl-mark-reset"></a>

Pada contoh di bawah ini, kita gunakan `mark(int)` dalam konstruktor sebelum membaca mulai untuk memastikan bahwa kita dapat mengatur ulang aliran kembali ke awal. Untuk setiap pemanggilan `newStream()` kami mengatur ulang aliran:

```
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;  
    }  
}
```

## Gunakan buffering jika `mark()` dan tidak `reset()` tersedia
<a name="csp-impl-unsupported-streams"></a>

 Jika streaming Anda tidak mendukung `mark()` dan `reset()` secara langsung, Anda masih dapat menggunakan solusi yang ditunjukkan sebelumnya dengan terlebih dahulu membungkus aliran dalam`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;  
    }  
}
```

## Buat aliran baru
<a name="csp-impl-new-stream"></a>

Pendekatan yang lebih sederhana adalah dengan hanya mendapatkan aliran baru ke data Anda pada setiap pemanggilan dan menutup yang sebelumnya:

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