Maison > Java > javaDidacticiel > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-26 04:36:31
original
378 Les gens l'ont consulté

How to Read from an Input Stream Multiple Times Without Modifying it?

Préserver les flux d'entrée pour une lecture séquentielle

La lecture à partir d'un flux d'entrée plusieurs fois sans le modifier ou créer un nouveau flux peut être nécessaire dans certains scénarios, par exemple lors du téléchargement d’une image et de son enregistrement local. Heureusement, il est possible de dupliquer un flux d'entrée pour un accès répété.

Une approche consiste à utiliser la méthode org.apache.commons.io.IOUtils.copy pour transférer le contenu du flux d'entrée dans un tableau d'octets. Ce tableau d'octets peut ensuite être lu à plusieurs reprises à l'aide d'un ByteArrayInputStream.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
org.apache.commons.io.IOUtils.copy(in, baos);
byte[] bytes = baos.toByteArray();
Copier après la connexion

À partir de là, vous pouvez suivre l'une ou l'autre approche :

  • Création répétée de ByteArrayInputStream :

    while (needToReadAgain) {
      ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
      yourReadMethodHere(bais);
    }
    Copier après la connexion
  • Réinitialisation de ByteArrayInputStream :

    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    while (needToReadAgain) {
      bais.reset();
      yourReadMethodHere(bais);
    }
    Copier après la connexion

Attention : La copie du flux complet en mémoire peut ne pas être appropriée pour les flux volumineux ou infinis en raison d'un épuisement potentiel de la mémoire. Des approches alternatives, telles que l'utilisation d'un tampon ou d'une structure de données distincte, peuvent être nécessaires dans de tels cas.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!