Question

Quelle est la différence entre l'utilisation d'un BufferedReader autour du StringReader dans le code suivant vs en utilisant le StringReader seulement? En chargeant le DOM dans la ligne 2 des deux exemples, il semble que le BufferedReader n'est pas nécessaire?

    InputSource is = new InputSource(new StringReader(html));
    Document dom = XMLResource.load(is).getDocument();

VS

    InputSource is = new InputSource(new BufferedReader(new StringReader(html)));
    Document dom = XMLResource.load(is).getDocument();
Était-ce utile?

La solution

Dans ce cas particulier, je ne vois aucun avantage. En général, il y a deux avantages:

  • procédé readLine() est uniquement définie dans BufferedReader plutôt que Reader (ici sans objet)
  • BufferedReader réduit IO où les appels individuels au lecteur sous-jacent sont potentiellement coûteux (par exemple des appels moins gros morceaux sont plus rapides que beaucoup de petits) - encore une fois, hors de propos pour StringReader

Coupez et collez l'échec?

Autres conseils

EDIT: Ma réponse originale ci-dessous. Le dessous pas pertinent en l'espèce, puisque le lecteur tampon est enroulant un StringReader, qui enveloppe une chaîne. Il n'y a donc pas de mise en mémoire tampon à effectuer, et le BufferedReader semble redondant. Vous pourrait faire un argument pour l'utilisation de meilleures pratiques / cohérentes, mais il serait assez ténu.

Peut-être le résultat d'une copier / coller, ou peut-être un refactoring conduit IDE trop loin!

BufferedReader tentera de lire de façon plus optimale.

Autrement dit, il va lire plus gros morceaux de données en une seule fois (en une quantité configurable), puis mettre à la disposition au besoin. Cela permettra de réduire le nombre de lectures à partir du disque (etc.) au détriment d'une certaine utilisation de la mémoire.

Pour citer le Javadoc:

  

En général, chaque demande de lecture faite de   un lecteur provoque une lecture correspondant   demande à être du sous-jacent   caractère ou flux d'octets. Il est   donc conseillé d'envelopper un   BufferedReader autour de tout lecteur dont   read () opérations peuvent être coûteux, tels   comme FileReaders et InputStreamReaders

La version BufferedReader a été copié à partir du code qui permet de lire à partir d'un FileReader?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top