La dimensione del buffer per me non è un fattore rilevante, sono entrambi sufficientemente grandi per le tipiche letture da tastiera. Lo scanner, come hai giustamente notato, è qualcosa di molto più sofisticato: non è una classe pensata per leggere e basta, è pensata per fare un analisi lessicale e prelevare cose come gli Integer.
Stabilito che ottenere un IOException da System.in è molto improbabile, perché dovresti volere un try-catch? La classe Scanner ha già dei metodi (eg. hasNextInt) che ti permettono di fare i dovuti controlli.
Per come la vedo io, la cosa migliore da fare è questa:
Una linea di codice, facile e pulito.
Comoda? Per me è molto scomoda. Alla fine per ottenere un IOException da System.in deve succedere proprio qualcosa di molto particolare. Per come la vedo io, se capita, tanto vale far crashare il programma.L'uso del BufferedReader richiede (necessariamente da quanto ho capito) il costrutto try-catch per gestire le eccezioni. È decisamente comoda come cosa, ma non posso applicare la stessa cosa a Scanner ed appianare questa differenza?
Stabilito che ottenere un IOException da System.in è molto improbabile, perché dovresti volere un try-catch? La classe Scanner ha già dei metodi (eg. hasNextInt) che ti permettono di fare i dovuti controlli.
La classe Scanner è fatta apposta per questo. Vuoi scannerizzare un BufferedReader? Passi il BufferedReader a Scanner.Un oggetto BufferedReader ha un buffer maggiore rispetto ad uno di tipo Scanner, di conseguenza per immagazzinare stringhe di notevoli dimensioni è poco conveniente quest'ultimo. Tuttavia Scanner mi permette di prelevare solo ciò che io desidero da un buffer (eg. nextInt() ).
Posso fare qualcosa del genere con un oggetto BufferedReader?
Per come la vedo io, la cosa migliore da fare è questa:
Java:
String input = System.console().readLine();