

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

`ContentStreamProvider`è un'astrazione utilizzata in per consentire letture multiple dei AWS SDK for Java 2.x dati di input. Questo argomento spiega come implementarlo `ContentStreamProvider` correttamente per le applicazioni.

L'SDK for Java 2.x utilizza `ContentStreamProvider#newStream()` il metodo ogni volta che deve leggere un intero flusso. Affinché ciò funzioni per l'intero flusso, lo stream restituito deve essere sempre all'inizio del contenuto e deve contenere gli stessi dati. 

Nelle sezioni seguenti, forniamo tre approcci per implementare correttamente questo comportamento.

## Uso di `mark()` e `reset()`
<a name="csp-impl-mark-reset"></a>

Nell'esempio seguente, utilizziamo `mark(int)` il costruttore prima che inizi la lettura per assicurarci di poter ripristinare lo stream all'inizio. Per ogni invocazione di `newStream()` resettiamo lo stream:

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

## Usa il buffering se `mark()` e `reset()` non sono disponibili
<a name="csp-impl-unsupported-streams"></a>

 Se il tuo stream non supporta `reset()` direttamente `mark()` e direttamente, puoi comunque utilizzare la soluzione mostrata in precedenza, racchiudendo prima lo stream in: `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;  
    }  
}
```

## Crea nuovi stream
<a name="csp-impl-new-stream"></a>

Un approccio più semplice consiste semplicemente nell'ottenere un nuovo flusso di dati a ogni chiamata e chiudere quello precedente:

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