Foros del Web » Programación para mayores de 30 ;) » Java »

InputStream

Estas en el tema de InputStream en el foro de Java en Foros del Web. Buenas, Tengo un InputStream que contiene un xml. Y quiero leerlo más de una vez. if (inputStream.markSupported()) { inputStream.mark(Integer.MAX_VALUE); } PRIMERA LECTURA inputStream.reset(); SEGUNDA LECTURA ...
  #1 (permalink)  
Antiguo 09/06/2010, 09:12
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 7 meses
Puntos: 48
InputStream

Buenas,

Tengo un InputStream que contiene un xml. Y quiero leerlo más de una vez.

if (inputStream.markSupported()) {
inputStream.mark(Integer.MAX_VALUE);
}
PRIMERA LECTURA

inputStream.reset();

SEGUNDA LECTURA

Y en la segunda lectura me casca porque ha llegado al final del fichero. ¿Alguna idea de que hago mal?
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web
  #2 (permalink)  
Antiguo 09/06/2010, 10:59
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: InputStream

¿Has comprobado si soporta marcas?. Mirando la api de FileInputStream, no da la impresión de que sobreescriba el markSupported() de InputStream y este devuelve false. BufferedInputStream si lo soporta, quizás debas usar uno de esos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 10/06/2010, 02:02
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 7 meses
Puntos: 48
Respuesta: InputStream

Si que soporta marcas, ya que entra por por el if, vamos que ejecuta la sentencia:

inputStream.mark(Integer.MAX_VALUE);
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web
  #4 (permalink)  
Antiguo 10/06/2010, 03:33
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: InputStream

Segun el API, si no llamas a mark(), al hacer el reset() te tendría volver a comenzar desde el principio. ¿Has probado a no usar mark()?
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 11/06/2010, 05:00
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 7 meses
Puntos: 48
Respuesta: InputStream

Si no hago el mark, me salta la excepcion:
java.io.IOException: Resetting to an invalid mark

Así que sin mark voy a peor.
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web
  #6 (permalink)  
Antiguo 11/06/2010, 06:27
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: InputStream

Si yo lo pruebo directamente con un FileInputStream lo que me devuelve es:

Cita:
java.io.IOException: mark/reset not supported
Diria que no puedes re-leer el fichero con el mismo stream. Tendrás que cerrar el InputStream y volverlo a abrir.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 11/06/2010, 10:04
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: InputStream

Hay un detalle y es que no nos estás diciendo que InputStream estás usando. Presuponemos que FileInputStream, que no soporta mark(), pero dices que a tí sí te lo soporta, así que no estaría de más que dijeras qué InputStream estás usando.

Si ese InputStream soporta mark(), quizás el error esté en alguna otra cosa, quizás alguna variable o algo que no resetees en la primera lectura, o habría que probar si una vez que el InputStream llega al EOF admite un reset() o la condición de EOF ya queda marcada.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 14/06/2010, 05:18
Avatar de gran Wakka  
Fecha de Ingreso: septiembre-2007
Mensajes: 712
Antigüedad: 16 años, 7 meses
Puntos: 48
Respuesta: InputStream

El InputStream, me lo devolvia otra aplicación. Cuando pueda echo un ojo que tipo es exactamente.

Problema:

El unmarshall de JAXB modificaba mi InputStream de alguna forma que luego no permitía el reset.

Solucionado:

Pasando una copia de mi InputStream al Unmarshall, para que "estropease" la copia y no el original.


Gracias chuidiang y GreenEyed.
__________________
Información de Series de TV
Buscas o quieres ser redactor? Ofertas redactor web

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:51.