

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# `ContentStreamProvider`Implémenter dans le AWS SDK for Java 2.x
<a name="content-stream-provider"></a>

`ContentStreamProvider`est une abstraction utilisée dans le AWS SDK for Java 2.x pour autoriser plusieurs lectures de données d'entrée. Cette rubrique explique comment implémenter `ContentStreamProvider` correctement un pour vos applications.

Le SDK pour Java 2.x utilise `ContentStreamProvider#newStream()` cette méthode chaque fois qu'il doit lire un flux entier. Pour que cela fonctionne pour l'ensemble du flux, le flux renvoyé doit toujours se trouver au début du contenu et contenir les mêmes données. 

Dans les sections suivantes, nous proposons trois approches pour implémenter correctement ce comportement.

## Utilisation de `mark()` et `reset()`
<a name="csp-impl-mark-reset"></a>

Dans l'exemple ci-dessous, nous l'utilisons `mark(int)` dans le constructeur avant le début de la lecture pour nous assurer que nous pouvons remettre le flux au début. Pour chaque invocation, `newStream()` nous réinitialisons le flux :

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

## Utiliser la mise en mémoire tampon si `mark()` et si ce n'`reset()`est pas le cas
<a name="csp-impl-unsupported-streams"></a>

 Si votre flux ne le supporte `mark()` pas `reset()` directement, vous pouvez toujours utiliser la solution présentée précédemment en encapsulant d'abord le flux dans un `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;  
    }  
}
```

## Créez de nouveaux streams
<a name="csp-impl-new-stream"></a>

Une approche plus simple consiste simplement à obtenir un nouveau flux de données à chaque appel et à fermer le précédent :

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