Domanda

Qual è la differenza tra l'utilizzo di un BufferedReader intorno al StringReader nel codice seguente vs utilizzando solo lo StringReader? Caricando il DOM in linea 2 di entrambi gli esempi, sembra che la BufferedReader non è necessario?

    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();
È stato utile?

Soluzione

In questo caso particolare, non vedo alcun beneficio. In generale ci sono due vantaggi:

  • L'oh-così-comodo metodo readLine() è definito solo in BufferedReader anziché Reader (irrilevante)
  • BufferedReader riduce IO dove i singoli chiamate al lettore sottostante sono potenzialmente costosi (cioè chiamate meno robusti sono più veloci di tanti piccoli) - di nuovo, irrilevante StringReader

tagliare e incollare fallire?

Altri suggerimenti

EDIT: La mia risposta originale al di sotto. Il seguente non è rilevante in questo caso, poiché il lettore buffer è avvolgente uno StringReader, che avvolge una stringa. Quindi non c'è buffer da eseguire, e il BufferedReader sembra essere ridondante. potrebbero fare un ragionamento per l'utilizzo di best practice / coerenti, ma sarebbe piuttosto tenue.

Forse il risultato di un copia / incolla, o forse un refactoring IDE-driven troppo!

BufferedReader tenterà di leggere in modo più ottimale.

Cioè, si leggerà più grandi blocchi di dati in una sola volta (in una quantità configurabile), e quindi mettere a disposizione, come richiesto. Ciò consentirà di ridurre il numero di letture da disco (etc.) a scapito di un po 'di utilizzo della memoria.

Per citare Javadoc:

  

In generale, ogni richiesta di lettura fatta di   un lettore provoca una corrispondente lettura   richiesta di essere costituito sottostante   carattere o flusso di byte. È   quindi consigliabile avvolgere un   BufferedReader intorno a qualsiasi lettore di cui   lettura () operazioni possono essere costosi, quali   come FileReaders e InputStreamReaders

La versione BufferedReader stato copiato da un codice che consente di leggere da un FileReader?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top