

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Implementieren `ContentStreamProvider` Sie in der AWS SDK for Java 2.x
<a name="content-stream-provider"></a>

`ContentStreamProvider`ist eine Abstraktion, die verwendet wird, um mehrere Lesevorgänge AWS SDK for Java 2.x von Eingabedaten zu ermöglichen. In diesem Thema wird erklärt, wie Sie A `ContentStreamProvider` korrekt für Ihre Anwendungen implementieren.

Das SDK for Java 2.x verwendet die `ContentStreamProvider#newStream()` Methode jedes Mal, wenn es einen ganzen Stream lesen muss. Damit dies für den gesamten Stream funktioniert, muss der zurückgegebene Stream immer am Anfang des Inhalts stehen und dieselben Daten enthalten. 

In den folgenden Abschnitten stellen wir drei Ansätze zur korrekten Implementierung dieses Verhaltens vor.

## Verwendung von `mark()` und `reset()`
<a name="csp-impl-mark-reset"></a>

Im folgenden Beispiel verwenden wir `mark(int)` im Konstruktor vor Beginn des Lesens, um sicherzustellen, dass wir den Stream wieder auf den Anfang zurücksetzen können. Bei jedem Aufruf von setzen `newStream()` wir den Stream zurück:

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

## Verwenden Sie die Pufferung, falls `mark()` und nicht verfügbar `reset()` sind
<a name="csp-impl-unsupported-streams"></a>

 Wenn Ihr Stream S&D nicht `reset()` direkt unterstützt`mark()`, können Sie trotzdem die zuvor gezeigte Lösung verwenden, indem Sie den Stream zunächst in ein`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;  
    }  
}
```

## Erstelle neue Streams
<a name="csp-impl-new-stream"></a>

Ein einfacherer Ansatz besteht darin, bei jedem Aufruf einfach einen neuen Stream zu Ihren Daten abzurufen und den vorherigen zu schließen:

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