Estoy aprendiendo a usar un InputStream. Yo estaba tratando de utilizar la marca para BufferedInputStream, pero cuando intento para restablecer tengo estas excepciones:Límite de lectura de la marca de flujo de entrada almacenada
java.io.IOException: Resetting to invalid mark
Creo que esto significa que mi marca de leer límite se establece equivocado. De hecho, no sé cómo establecer el límite de lectura en mark(). Intenté de esta manera:
is = new BufferedInputStream(is);
is.mark(is.available());
Esto también es incorrecto.
is.mark(16);
Esto también arroja la misma excepción. ¿Cómo sé cuál es el límite de lectura que debo establecer? Como leeré diferentes tamaños de archivo de la secuencia de entrada.
Mi opinión personal? No use marca, aunque estoy seguro de que hay una, aún no he encontrado una buena razón para ello. A menudo, en primer lugar, es una señal de mala manipulación. Tiendo a pensar que una transmisión no es una transmisión a menos que tenga la forma más cruda que tiene. Prefiero tener un envoltorio cerrado que obtenga su información, la empaquete y envíe ese paquete para su procesamiento en algún lugar de la aplicación. – corsiKa
@glowcoder Gracias por su comentario. Como dije antes, soy nuevo en el trabajo con InputStream. De hecho, estaba tratando de usar el flujo de entrada dos veces. Pensé que esta es la manera de hacerlo. Ajuste de marca y reinicio. ¿Tienes alguna otra sugerencia sobre cómo lograr esto? –
Mark funciona así. Digamos que su flujo de entrada terminaría siendo 'A B C D E'. Usted procesa 'A B' hasta el momento. (Recuerda, aún no sabes qué es 'aguas abajo'). Lo marcas. Luego lees un poco más, y obtienes 'C D E'. Lo miras y dices "¡Espera, no puedo procesar' C D E' en este modo! " por cualquier razón. Entonces dices "Realmente me gustaría poder volver a procesar' C D E' otra vez ... lo cual puedes, ya que 'mark()' ed.Simplemente 'reset()' para volver a poner la secuencia donde estaba cuando la marcó, y puede volver a leerla como lo haría antes. – corsiKa