2011-07-16 16 views
9
InputStream data = realResponse.getEntity().getContent(); 
byte[] preview = new byte[100]; 
data.read(preview, 0, 100); 

// Ahora quiero hacer referencia a la InputStream más adelante, pero yo quiero que desde el principio de la corriente, no 100 Bytes. Me trataron mark() al 100, y luego reset() después de leer los primeros 100 bytes, pero eso tampoco funciona.InputStream no se reajustará en principio

¿Alguna idea? Probablemente sea un error estúpido ... simplemente no lo veo.

Respuesta

19

Cuando usa mark() del objeto java.io.InputStream debe consultar con el método markSupported() si su InputStream en realidad admite el uso de la marca. De acuerdo con la API, la clase InputStream no lo hace, pero la clase java.io.BufferedInputStream sí lo hace. Tal vez debería incrustar la secuencia dentro de un objeto BufferedInputStream como:

InputStream data = new BufferedInputStream(realResponse.getEntity().getContent()); 
// data.markSupported() should return "true" now 
data.mark(some_size); 
// work with "data" now 
... 
data.reset(); 
+0

Esto funcionó como un encanto. Necesitaba un BufferedInputStream – Du3

+0

https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#reset "el método reset() en InputStream no hace otra cosa que lanzar IOException()"; -) –

1

Si el InputStream apoya marca (se puede comprobar con el método markSupported()), entonces el siguiente debería funcionar:

InputStream data = realResponse.getEntity().getContent(); 
byte[] preview = new byte[100]; 
data.mark(100); 
data.read(preview, 0, 100); 
data.reset(); 

Sin embargo, tenga en cuenta que data.read(preview, 0, 100) es no garantizada para leer 100 bytes de una sola vez , puede leer menos

+0

¿La secuencia de entrada getContent() admite mark()? – extraneon

+0

No puedo responder esto sin saber qué es la clase 'realResponse' (y en qué versión de la biblioteca se encuentra). – Lucero

+0

@Lucero sí puedes. markSupported() te dice eso. – EJP

Cuestiones relacionadas