

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

`ContentStreamProvider`é uma abstração usada no AWS SDK for Java 2.x para permitir várias leituras dos dados de entrada. Este tópico explica como implementar um `ContentStreamProvider` corretamente para suas aplicações.

O SDK para Java 2.x usa o método `ContentStreamProvider#newStream()` sempre que precisa ler um fluxo inteiro. Para que isso funcione em todo o fluxo, o fluxo que retornar deve estar sempre no início do conteúdo e conter os mesmos dados. 

Nas seções a seguir, fornecemos três abordagens sobre como implementar esse comportamento corretamente.

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

No exemplo abaixo, usamos `mark(int)` no construtor antes do início da leitura para garantir que possamos redefinir o fluxo de volta ao início. Para cada invocação de `newStream()`, redefinimos o fluxo:

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

## Use o buffer se `mark()` e `reset()` não estiverem disponíveis
<a name="csp-impl-unsupported-streams"></a>

 Se o fluxo não comportar `mark()` e `reset()` diretamente, você ainda poderá usar a solução mostrada anteriormente, primeiro agrupando o fluxo em um `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;  
    }  
}
```

## Criar fluxos
<a name="csp-impl-new-stream"></a>

Uma abordagem mais simples é simplesmente obter um novo fluxo para seus dados em cada invocação e fechar o anterior:

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