Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Implemente ContentStreamProvider
en el AWS SDK for Java 2.x
ContentStreamProvider
es una abstracción utilizada en el para permitir múltiples lecturas de AWS SDK for Java 2.x los datos de entrada. En este tema se explica cómo implementar ContentStreamProvider
correctamente una para sus aplicaciones.
El SDK para Java 2.x usa el ContentStreamProvider#newStream()
método cada vez que necesita leer una transmisión completa. Para que esto funcione en toda la transmisión, la transmisión devuelta debe estar siempre al principio del contenido y debe contener los mismos datos.
En las siguientes secciones, ofrecemos tres enfoques para implementar este comportamiento correctamente.
Utilice mark()
y reset()
En el siguiente ejemplo, lo utilizamos mark(int)
en el constructor antes de que comience la lectura para asegurarnos de que podemos restablecer la secuencia al principio. Para cada invocación de, newStream()
restablecemos la secuencia:
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; } }
Utilice el almacenamiento en búfer si no está mark()
disponible reset()
Si tu transmisión no es compatible mark()
y reset()
directa, puedes seguir usando la solución que se mostró anteriormente envolviendo primero la transmisión en una forma: 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 nuevas transmisiones
Un enfoque más sencillo consiste simplemente en obtener una nueva secuencia de datos en cada invocación y cerrar la anterior:
public class MyContentStreamProvider implements ContentStreamProvider { private InputStream contentStream; @Override public InputStream newStream() { if (contentStream != null) { contentStream.close(); } contentStream = openStream(); return contentStream; } }