Perché usare BufferedReader in questo caso?
-
06-09-2019 - |
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();
Soluzione
In questo caso particolare, non vedo alcun beneficio. In generale ci sono due vantaggi:
- L'oh-così-comodo metodo
readLine()
è definito solo inBufferedReader
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, irrilevanteStringReader
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?