Domanda

Per quanto ne so, vengono utilizzati i due metodi più comuni per leggere i dati basati sui caratteri da un file in Java Scanner O BufferedReader.So anche che il BufferedReader leggere i file in modo efficiente utilizzando un buffer per evitare operazioni sul disco fisico.Le mie domande sono:

  • Fa Scanner si comporta così come BufferedReader?
  • Perché sceglieresti? Scanner Sopra BufferedReader o vice versa?
È stato utile?

Soluzione

Scanner viene utilizzato per analizzare i token dal contenuto del torrente, mentre BufferedReader appena legge il flusso e non fa alcuna analisi speciale.

In realtà è possibile passare un BufferedReader ad un scanner come fonte di caratteri da analizzare.

Altri suggerimenti

Nel momento ultima JDK6 versione / build (B27), il Scanner ha un buffer più piccolo ( 1024 caratteri ) in contrasto con il BufferedReader ( 8192 caratteri ), ma è più che sufficiente.

Per quanto riguarda la scelta, utilizzare il Scanner se si desidera parse il file, utilizzare il BufferedReader se si desidera lettura il file riga per riga. Si veda anche il testo introduttivo della loro documentazione API aforelinked.

  • Analisi = interpretare l'informazione fornita come token (parti). E 'in grado di restituire voi specifiche parti direttamente come int, string, decimale, ecc Vedi anche tutti quei metodi nextXxx() in classe Scanner.
  • Lettura = Streaming muto. Si continua a dare indietro voi tutti i personaggi, che si a loro volta hanno per ispezionare manualmente se si desidera abbinare o comporre qualcosa di utile. Ma se non c'è bisogno di farlo comunque, quindi la lettura è sufficiente.

link , seguente è citato da lì:

  

Un BufferedReader è una semplice classe significava per leggere in modo efficiente dal   flusso subalterno. In generale, ogni richiesta di lettura costituito da un lettore come un   FileReader provoca una richiesta di lettura corrispondente da apportare   flusso sottostante. Ogni invocazione di read () o readLine () potrebbe   causa byte da leggere dal file, convertito in caratteri e   poi tornò, che può essere molto inefficiente. L'efficienza è migliorata   sensibilmente Se un lettore viene deformato in un BufferedReader.

     

BufferedReader è sincronizzato, così operazioni di lettura su un BufferedReader   può tranquillamente essere fatto da più thread.

     

Uno scanner d'altra parte ha molto più formaggio integrato in esso; esso   può fare tutto ciò che un BufferedReader può fare e allo stesso livello di   efficienza pure. Tuttavia, in aggiunta uno scanner in grado di analizzare la   flusso sottostante per i tipi primitivi e stringhe utilizzando regolari   espressioni. Può anche tokenize flusso sottostante con la   delimitatore di vostra scelta. Si può anche fare la scansione in avanti della   flusso sottostante trascurando il delimitatore!

     

Uno scanner tuttavia non è thread-safe, deve essere esternamente   sincronizzato.

     

La scelta di utilizzare un BufferedReader o uno scanner dipende dal codice   si sta scrivendo, se si sta scrivendo una semplice lettura log Buffered   lettore è adeguata. Tuttavia, se si sta scrivendo un parser XML scanner   è la scelta più naturale.

     

Anche durante la lettura l'ingresso, se vogliono accettare linea di inserimento da   la linea e dire basta aggiungere a un file, un BufferedReader è abbastanza buono.   D'altra parte, se si desidera accettare l'input dell'utente come un comando con   più opzioni, e poi intendono eseguire diverse operazioni   sulla base del comando e le opzioni specificati, uno scanner si adatta   meglio.

  1. BufferedReader ha significativamente più grande memoria buffer di scanner. Utilizzare BufferedReader se si desidera ottenere stringhe lunghe da un ruscello, e utilizzare Scanner se si vuole analizzare specifico tipo di gettone da un ruscello.

  2. Scanner può utilizzare tokenize utilizzando delimitatore personalizzato e analizzare il flusso in tipi primitivi dei dati, mentre BufferedReader può solo leggere e memorizzare Stringa.

  3. BufferedReader è sincrona mentre Scanner non è. Utilizzare BufferedReader se si sta lavorando con più thread.

  4. Scanner nasconde IOException durante BufferedReader getta immediatamente.

Suggerisco di usare BufferedReader per la lettura del testo. Scanner nasconde IOException mentre BufferedReader getta immediatamente.

Differenza fra BufferedReader E Scanner stanno seguendo:

  1. BufferedReader lo è sincronizzato ma Scanner lo è non sincronizzato.
  2. BufferedReader lo è sicuro per il filo ma Scanner lo è non thread-safe.
  3. BufferedReader ha una memoria buffer più grande ma Scanner ha una memoria buffer più piccola.
  4. BufferedReader lo è Più veloce ma Scanner lo è più lento nell'esecuzione.
  5. Codice per leggere una riga dalla console:

    BufferedReader:

     InputStreamReader isr=new InputStreamReader(System.in);
     BufferedReader br= new BufferedReader(isr);
     String st= br.readLine();
    

    Scanner:

    Scanner sc= new Scanner(System.in);
    String st= sc.nextLine();
    

Di seguito sono riportate le differenze tra BufferedReader e Scanner

  1. BufferedReader legge solo i dati ma lo scanner li analizza anche.
  2. È possibile leggere solo la stringa usando BufferedReader, ma puoi leggere int, lungo o galleggiare usando lo scanner.
  3. BufferedReader è più vecchio dallo scanner, esiste da JDK 1.1 mentre lo scanner è stato aggiunto sulla versione JDK 5.
  4. La dimensione del tampone del bufferedReader è grande (8kb) rispetto a 1 kb di scanner.
  5. BufferedReader è più adatto per la lettura di file con stringa lunga mentre lo scanner è più adatto per la lettura di piccoli input utente dal prompt dei comandi.
  6. BufferedReader è sincronizzato ma lo scanner non lo è, il che significa che non è possibile condividere lo scanner tra più thread.
  7. BufferedReader è più veloce dello scanner perché non ha trascorso il tempo ad analizzare
  8. BufferedReader è un po' più veloce rispetto a Scanner
  9. BufferedReader proviene dal pacchetto Java.io e lo scanner è del pacchetto Java.util sulla base dei punti che possiamo selezionare la nostra scelta.

Grazie

le differenze principali:

  1. Scanner

  • Un semplice scanner di testo che può analizzare i tipi primitivi e le stringhe utilizzando le espressioni regolari.
  • A Scanner rompe il suo input in token utilizzando un modello delimitatore, che di default corrisponde a spazi bianchi. I gettoni risultanti possono poi essere convertiti in valori di tipi diversi utilizzando i diversi metodi seguenti.

Esempio

 String input = "1 fish 2 fish red fish blue fish";
 Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
 System.out.println(s.nextInt());
 System.out.println(s.nextInt());
 System.out.println(s.next());
 System.out.println(s.next());
 s.close(); 

stampa il seguente output:

 1
 2
 red
 blue 

La stessa uscita può essere generato con questo codice, che utilizza un'espressione regolare per analizzare tutti i quattro gettoni contemporaneamente:

 String input = "1 fish 2 fish red fish blue fish";

 Scanner s = new Scanner(input);
 s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
 MatchResult result = s.match();
 for (int i=1; i<=result.groupCount(); i++)
     System.out.println(result.group(i));
 s.close(); `


  1. BufferedReader:

    • Legge testo da un flusso di immissione di caratteri, buffer caratteri in modo da provvedere alla lettura efficace dei caratteri, array e linee.

    • La dimensione del buffer può essere specificato, o la dimensione predefinita può essere utilizzato. Il valore di default è abbastanza grande per la maggior parte degli scopi.

In generale, ogni richiesta di lettura costituito da un lettore provoca una richiesta di lettura corrispondente ad essere fatto di flusso di caratteri o byte sottostante. E 'quindi consigliabile avvolgere un BufferedReader intorno a qualsiasi lettore di cui read () le operazioni possono essere costosi, come ad esempio FileReaders e InputStreamReaders. Ad esempio,

BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));

si tamponare l'input dal file specificato. Senza buffering, ogni chiamata read () o readLine () potrebbe causare byte da leggere dal file, convertite in caratteri e quindi restituito, che può essere molto inefficiente. I programmi che utilizzano DataInputStreams per l'input testuale possono essere localizzati sostituendo ogni DataInputStream un BufferedReader appropriata.

Fonte: link

Ci sono diversi modi di prendere in ingresso in Java come:

1) BufferedReader 2) Scanner 3) Argomenti della riga di comando

BufferedReader Leggere testo da un flusso di immissione di caratteri, buffer caratteri in modo da provvedere alla lettura efficace dei caratteri, array e linee.

Dove Scanner è un semplice scanner di testo che può analizzare i tipi primitivi e stringhe utilizzando espressioni regolari.

se si sta scrivendo un semplice lettore di lettura log buffer è adeguata. se si sta scrivendo uno scanner parser XML è la scelta più naturale.

Per ulteriori informazioni si prega di consultare:

http://java.meritcampus.com/t/240/Bufferedreader? tc = mm69

La risposta seguente è tratta da Lettura da Console:Scanner JAVA rispetto a BufferedReader

Quando si legge un input dalla console, esistono due opzioni per raggiungere questo obiettivo.Primo utilizzo Scanner, un altro utilizzando BufferedReader.Entrambi hanno caratteristiche diverse.Significa differenze su come usarlo.

Lo scanner ha trattato l'input fornito come token.BufferedReader legge semplicemente riga per riga l'input fornito come stringa.Lo scanner stesso fornisce funzionalità di analisi proprio come nextInt(), nextFloat().

Ma quali sono le differenze tra gli altri?

  • Lo scanner ha trattato l'input fornito come token.BufferedReader come linea di flusso/stringa
  • Lo scanner ha tokenizzato l'input fornito utilizzando regex.Utilizzando BufferedReader è necessario scrivere codice aggiuntivo
  • BufferedReader più veloce dello scanner *punto n.2
  • Lo scanner non è sincronizzato, BufferedReader sincronizzato

Lo scanner viene fornito a partire dalla versione JDK 1.5 successiva.

Quando utilizzare lo scanner o il lettore bufferizzato?

Guarda le principali differenze tra entrambi, uno utilizza tokenizzato, altri utilizzano stream line.Quando sono necessarie funzionalità di analisi, utilizzare invece Scanner.Ma mi sento più a mio agio con BufferedReader.Quando hai bisogno di leggere da un file, usa BufferedReader, perché usa il buffer quando leggi un file.Oppure puoi utilizzare BufferedReader come input per Scanner.

  1. BufferedReader probabilmente vi darà la migliore prestazione (a causa dello scanner è basata su InputStreamReader, cercare fonti). UPS, per la lettura di file che utilizza nio. Quando ho provato prestazioni nio contro prestazioni BufferedReader per file di grandi dimensioni NIO mostra un po 'meglio le prestazioni.
  2. Per la lettura dal file provare Apache Commons IO.

Io preferisco Scanner perché non getta eccezioni controllate e quindi è risultato di utilizzo in un codice più snello.

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