Maison >Java >javaDidacticiel >Comment lire un flux d'entrée plusieurs fois ?

Comment lire un flux d'entrée plusieurs fois ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 06:18:021019parcourir

 How to Read an Input Stream Multiple Times?

Préserver les flux d'entrée pour plusieurs lectures

La lecture d'un flux d'entrée deux fois présente un défi car les flux d'entrée typiques sont conçus pour être consommés de manière linéaire. Pour faciliter cela, envisagez les stratégies suivantes :

Convertir en tableau d'octets

Utilisez la méthode org.apache.commons.io.IOUtils.copy pour transférer le flux d'entrée. contenu dans un tableau d’octets. Créez un nouveau ByteArrayInputStream à partir de ce tableau d'octets pour le lire à plusieurs reprises :

<code class="java">ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();

// Read from byte array repeatedly
while (needToReadAgain) {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    yourReadMethodHere(bais);
}</code>

Réinitialiser le flux d'entrée

Vous pouvez également réinitialiser le flux d'entrée après chaque opération de lecture. Cela vous permet de parcourir le flux plusieurs fois sans créer de tableau d'octets intermédiaire :

<code class="java">// Create ByteArrayInputStream from original input stream
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

// Read from input stream repeatedly
while (needToReadAgain) {
    bais.reset(); // Reset stream for subsequent reads
    yourReadMethodHere(bais);
}</code>

Attention

Lorsque vous traitez des flux volumineux, il est crucial de prendre en compte la mémoire contraintes. Les approches ci-dessus copient le flux en mémoire, ce qui peut ne pas être réalisable dans de tels cas. Pour les ensembles de données volumineux, envisagez d'autres stratégies, comme lire une plage d'octets à la fois.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn