"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo reutilizar un flujo de entrada para múltiples lecturas en Java?

¿Cómo reutilizar un flujo de entrada para múltiples lecturas en Java?

Publicado el 2024-11-08
Navegar:390

How to Reuse an Input Stream for Multiple Reads in Java?

Reutilizar flujos de entrada

Leer el mismo flujo de entrada dos veces puede resultar útil en varios escenarios. Uno de esos escenarios es cargar una imagen remota, guardarla localmente y luego acceder a la imagen guardada. Para lograr esto, es más eficiente reutilizar el mismo flujo de entrada en lugar de crear uno nuevo.

Una forma de reutilizar un flujo de entrada es copiando su contenido en una matriz de bytes. Esto se puede hacer usando el método org.apache.commons.io.IOUtils.copy. La matriz de bytes resultante se puede usar para crear múltiples objetos ByteArrayInputStream, que se pueden leer repetidamente.

Aquí hay un ejemplo de cómo hacer esto:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();

// Option 1: Read the byte array multiple times
while (needToReadAgain) {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    yourReadMethodHere(bais);
}

// Option 2: Reset the input stream to read from it again
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
while (needToReadAgain) {
    bais.reset();
    yourReadMethodHere(bais);
}

Tenga en cuenta que este enfoque puede no ser adecuado para transmisiones grandes o infinitas, ya que implica copiar el contenido de la transmisión a la memoria.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3