2009-06-04 16 views
7

Tengo un componente de "procesador" que puede procesar un solo archivo, InputStream, lector, etc.¿Existe alguna manera fácil de crear un Java InputStream que consista en varios archivos adjuntos?

Por varias razones, termino con varios archivos grandes en lugar de un archivo enorme.

¿Hay una manera de construir un flujo de entrada (o lector) que: transparente "anexa" todos estos archivos de forma que: 1) El "procesador" no sabe dónde un archivo empezó u otro terminó 2) No se se producen cambios en el sistema de archivos (p. ej., no se anexan archivos) 3) ¿Se lee cada archivo en orden para que no pague el costo de cargarlos todos en la memoria y anexarlos antes de que el procesador comience a leer?

Estoy seguro de que es posible escribir algo como esto, pero me pregunto si ya existe; Ha pasado un tiempo desde que hice el archivo basado en IO.

Respuesta

19

SequenceInputStream concatena múltiples flujos.

List<InputStream> opened = new ArrayList<InputStream>(files.size()); 
for (File f : files) 
    opened.add(new FileInputStream(f)); 
InputStream is = new SequenceInputStream(Collections.enumeration(opened)); 

Manejo de excepciones (no se muestra) al abrir cada archivo es importante; asegúrese de que todos los archivos cierren con certeza, incluso si la operación se cancela antes de que se cree el SequenceInputStream.

+1

Maldita sea, estaba familiarizado con las transmisiones de Piped, no sabía que esta existe, debería haber mirado mejor. Gracias ! – Uri

Cuestiones relacionadas