Cómo clonar un flujo de entrada en java en un tiempo mínimo

¿Puede alguien decirme cómo clonar un flujo de entrada, tomando el menor tiempo de creación posible? Necesito clonar un flujo de entrada varias veces para que múltiples métodos procesen el IS. He intentado tres maneras y las cosas no funcionan por una razón u otra.

Método # 1: Gracias a la comunidad stackoverflow, encontré útil el siguiente enlace y he incorporado el fragmento de código en mi programa.

¿Cómo clonar un InputStream?

Sin embargo, el uso de este código puede demorar hasta un minuto (para un archivo de 10 MB) para crear las secuencias de entrada clonadas y mi programa debe ser lo más rápido posible.

    int read = 0;
    byte[] bytes = new byte[1024*1024*2];

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while ((read = is.read(bytes)) != -1)
        bos.write(bytes,0,read);
    byte[] ba = bos.toByteArray();

    InputStream is1 = new ByteArrayInputStream(ba);
    InputStream is2 = new ByteArrayInputStream(ba);
    InputStream is3 = new ByteArrayInputStream(ba);

Método # 2: También intenté usar BufferedInputStream para clonar el IS. Esto fue rápido (tiempo de creación más lento == 1 ms. Más rápido == 0 ms). Sin embargo, después de que envié is1 para ser procesado, el procesamiento de los métodos is2 y is3 arrojó un error que decía que no había nada que procesar, casi como las 3 variables a continuación que hacen referencia al mismo IS.

    is = getFileFromBucket(path,filename);
    ...
    ...
    InputStream is1 = new BufferedInputStream(is);
    InputStream is2 = new BufferedInputStream(is);
    InputStream is3 = new BufferedInputStream(is);

Método # 3: Creo que el compilador me está mintiendo. Revisé markSupported () para is1 para los dos ejemplos anteriores. Se volvió verdad, así que pensé que podría correr

    is1.mark() 
    is1.reset()

o solo

    is1.reset();

Antes de pasar el IS a mis respectivos métodos. En los dos ejemplos anteriores, recibo un error que dice que es una marca no válida.

Ya no tengo ideas, así que gracias de antemano por cualquier ayuda que me puedas dar.

PD De los comentarios que he recibido de personas, necesito aclarar un par de cosas con respecto a mi situación: 1) Este programa se está ejecutando en una VM 2) La corriente de entrada se pasa a mí desde otro método. No estoy leyendo desde un archivo local 3) No se conoce el tamaño de la corriente de entrada

Respuestas a la pregunta(4)

Su respuesta a la pregunta