"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como reutilizar um fluxo de entrada para múltiplas leituras em Java?

Como reutilizar um fluxo de entrada para múltiplas leituras em Java?

Publicado em 2024-11-08
Navegar:402

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

Reutilizando fluxos de entrada

Ler o mesmo fluxo de entrada duas vezes pode ser útil em vários cenários. Um desses cenários é carregar uma imagem remota, salvá-la localmente e depois acessar a imagem salva. Para conseguir isso, é mais eficiente reutilizar o mesmo fluxo de entrada em vez de criar um novo.

Uma maneira de reutilizar um fluxo de entrada é copiar seu conteúdo para uma matriz de bytes. Isso pode ser feito usando o método org.apache.commons.io.IOUtils.copy. A matriz de bytes resultante pode então ser usada para criar vários objetos ByteArrayInputStream, que podem ser lidos repetidamente.

Aqui está um exemplo de como fazer isso:

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);
}

Observe que esta abordagem pode não ser adequada para fluxos grandes ou infinitos, pois envolve a cópia do conteúdo do fluxo para a memória.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3