Maison >Java >javaDidacticiel >Comment lire un flux d'entrée plusieurs fois ?
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!