0Pricing
Java Academy · Lezione

Perché BufferedReader

Letture con e senza buffer

Perché BufferedReader è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.

Lettura dell'input in Java

La maggior parte dei programmi reali ha bisogno dell'input dell'utente: un nome, un numero, un comando. Java offre diversi modi per leggere l'input, ma uno dei più comuni ed efficienti è BufferedReader.

In questa lezione imparerà perché esiste BufferedReader e quando conviene utilizzarlo.

Da dove proviene l'input

Quando digita nella console, il testo passa attraverso System.in. Si tratta di un flusso di byte di basso livello: fornisce byte grezzi, non testo facilmente leggibile.

Per trasformare questi byte in caratteri leggibili e righe complete, li avvolgiamo con classi di supporto. BufferedReader è il wrapper che semplifica questa operazione.

Che cosa significa 'Buffered'

Leggere un byte alla volta dalla tastiera o da un file è lento. Un buffer è una porzione di memoria che contiene molti caratteri contemporaneamente.

BufferedReader riempie questo buffer in blocchi grandi, poi fornisce rapidamente i dati. Un numero inferiore di accessi al flusso sottostante garantisce prestazioni migliori, soprattutto con input di grandi dimensioni.

Configurazione a due livelli

BufferedReader non può leggere direttamente System.in, perché quel flusso fornisce byte. Prima lo avvolgiamo in un InputStreamReader, che converte i byte in caratteri.

  • System.in → byte
  • InputStreamReader → caratteri
  • BufferedReader → righe memorizzate nel buffer
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

La classica riga unica

Vedrà questa riga esatta in quasi ogni programma Java che legge l'input dalla console. Collega entrambi i wrapper in un'unica istruzione.

Ricordi: il InputStreamReader interno gestisce la conversione da byte a caratteri, mentre il BufferedReader esterno aggiunge il buffering e il pratico metodo readLine().

BufferedReader br =
    new BufferedReader(new InputStreamReader(System.in));

Importazioni necessarie

Queste classi si trovano nel package java.io, quindi deve importarle all'inizio del file.

La lettura dell'input può fallire, perciò i metodi generano IOException: dovrà importarla o gestirla, come vedremo più avanti.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

BufferedReader e Scanner

I principianti incontrano spesso prima Scanner. È più semplice da usare (può analizzare direttamente i numeri), ma è più lento.

  • Scanner: parsing semplice, maggiore overhead.
  • BufferedReader: più veloce, legge righe intere, ma richiede di analizzare i numeri autonomamente.

Per input di grandi dimensioni o per la programmazione competitiva, BufferedReader è più veloce.

Lettura di un'intera riga

Il metodo principale è readLine(). Legge tutto ciò che l'utente digita fino alla pressione di Invio e lo restituisce come String (senza il carattere di nuova riga).

Se non c'è altro input, readLine() restituisce null. Lo analizzeremo nella prossima lezione.

String name = br.readLine();
System.out.println("Hello, " + name);

Programma completo di lettura

Ecco un programma completo. Legge una riga e saluta l'utente. Noti throws IOException su main: è un modo rapido, mentre si sta imparando, per lasciare che gli errori di input risalgano fino al chiamante.

Questo frammento attende l'input dalla tastiera, quindi qui non può essere eseguito automaticamente, ma è codice Java valido.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        String name = br.readLine();
        System.out.println("Hi " + name);
    }
}

Non serve input per verificare il funzionamento

Per verificare che i wrapper esistano e vengano compilati, ecco una versione eseguibile che non legge nulla: si limita a confermare che l'oggetto è stato creato.

In un'applicazione reale chiamerebbe readLine(), ma questa versione stampa un messaggio, così può eseguirla subito.

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) {
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        System.out.println("BufferedReader is ready!");
    }
}

Quando utilizzare BufferedReader

Utilizzi BufferedReader quando deve:

  • leggere molte righe o file di grandi dimensioni;
  • prestare attenzione alla velocità;
  • lavorare con testo semplice, riga per riga.

Utilizzi invece Scanner quando desidera analizzare rapidamente i numeri e l'input è ridotto. Entrambi sono strumenti validi: scelga quello più adatto.

Verifica rapida

Verifichi di aver compreso la configurazione di BufferedReader.

Riepilogo

Ha imparato che System.in è un flusso di byte, avvolto prima da InputStreamReader (da byte a caratteri) e poi da BufferedReader (buffering e readLine()).

Il buffering migliora le prestazioni e BufferedReader è particolarmente utile per input di grandi dimensioni o organizzato per righe. Prossimo argomento: lettura dettagliata delle righe.

Domande Frequenti

La lezione «Perché BufferedReader» è gratuita?

Sì — il testo completo di «Perché BufferedReader» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.

Cosa imparerò in «Perché BufferedReader»?

Letture con e senza buffer Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Perché BufferedReader»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché BufferedReader
  2. Lettura delle righe
  3. Analisi dei numeri dall'input
  4. Chiusura sicura degli stream
← Torna a Java Academy