Cómo almacenar en caché InputStream para uso múltiple

Tengo un InputStream de un archivo y uso componentes de apache poi para leerlo así:

POIFSFileSystem fileSystem = new POIFSFileSystem(inputStream);

El problema es que necesito usar la misma secuencia varias veces y POIFSFileSystem cierra la secuencia después de usarla.

Cuál es la mejor manera de almacenar en caché los datos de la secuencia de entrada y luego servir más secuencias de entrada a diferentes POIFSFileSystem?

EDIT 1:

Por caché, me refería a la tienda para su uso posterior, no como una forma de acelerar la aplicación. ¿También es mejor simplemente leer la secuencia de entrada en una matriz o cadena y luego crear secuencias de entrada para cada uso?

EDIT 2:

Sorry para volver a abrir la pregunta, pero las condiciones son algo diferentes cuando se trabaja dentro de una aplicación web y de escritorio. En primer lugar, el InputStream que obtengo de org.apache.commons.fileupload.FileItem en mi aplicación web tomcat no admite marcas, por lo que no se puede restablecer.

n segundo lugar, me gustaría poder mantener el archivo en la memoria para un acceso más rápido y menos problemas de io al tratar con archivos.

Respuestas a la pregunta(20)

Su respuesta a la pregunta