devstory

Le Tutoriel de Java BufferedReader

  1. BufferedReader
  2. BufferedReader vs Scanner
  3. Examples
  4. lines()

1. BufferedReader

BufferedReader est une sous-classe de Reader utilisée pour simplifier la lecture de texte à partir de flux d'entrée de caractères (character input stream) et optimiser les performances du programme.
L'illustration ci-dessous démontre le principe de fonctionnement de BufferedReader:
BufferedReader enveloppe à son intérieur un objet Reader, qui lit automatiquement les données d'origine (par exemple un fichier) et les stocke dans buffer (la mémoire tampon) de BufferedReader.
BufferedReader outrepasse les méthodes héritées de sa classe parente, telles que read(), read(char[]), ... pour s'assurer qu'elles fonctionneront avec les données de buffer plutôt que de celles d'origine (par exemple, fichier). Par ailleurs, BufferedReader fournit une méthode readLine() pour lire une ligne de texte à partir de buffer.
En effet, ce qu'on appelle "buffer" ci-dessus n'est qu'un tableau de caractères. L'objet Reader (de BufferedReader) lit automatiquement les caractères d'origine pour stocker dans ce tableau.
BufferedReader lit les caractères du tableau de buffer et libère les positions lues. Les positions libérées seront utilisées pour stocker les caractères nouvellement lus à partir d'origine.
BufferedReader constructors
public BufferedReader(Reader in)

public BufferedReader(Reader in, int sz)
  • Le constructeur BufferedReader(Read,int) crée un objet BufferedReader avec le tableau de buffer spécifié.
  • Le constructeur BufferedReader(Reader) crée un objet BufferedReader avec le tableau de buffer de taille par défaut (sz = 8192).

2. BufferedReader vs Scanner

Dans certains cas, vous pouvez utiliser Scanner plutôt que BufferedReader. Ci-dessous une comparaison entre ces deux classes:
  • BufferedReader est synchronisé (thread-safe) alors que Scanner ne l'est pas.
  • Scanner peut analyser les types primitifs et les chaînes à l'aide d'expressions régulières.
  • BufferedReader permet de spécifier la taille de buffer alors que Scanner a une taille de buffer fixe (1024).
  • BufferedReader a une plus grande taille de buffer par défaut.
  • Scanner cache IOException, alors que BufferedReader oblige à le gérer.
  • BufferedReader est généralement plus rapide que Scanner, car il ne lit que les données sans les analyser.
  • Le Tutoriel de Java Scanner

3. Examples

Afin de créer un objet BufferedReader, il faut créer un objet Reader pour lire les données depuis l'origine (par exemple depuis File). Étant donné que Reader est une classe abstraite, il faut la créer à partir de l'une de ses sous-classes.
Exemple: Créer un BufferedReader avec un tableau de buffer de taille de 16384. Remarque: le type de données char de Java est de 2 bytes. Cela signifie que cette buffer a une taille de 32786 bytes (32 KB).
// Create Reader to read a file.
Reader reader = new FileReader("/Volumes/Data/test/test.txt");

// Create a BufferedReader with buffer array size of 16384 (32786 bytes = 32 KB).
BufferedReader br = new BufferedReader(reader, 16384);
Créer un BufferedReader avec le tableau de buffer de taille par défaut (8192), ce qui équivaut à 16384 bytes (16 KB).
// Create Reader to read a file.
Reader reader = new FileReader("/Volumes/Data/test/test.txt");

// Create a BufferedReader with default buffer array size of 8192 (16384 bytes = 16 KB).
BufferedReader br = new BufferedReader(reader);
Plutôt de créer un BufferedReader à partir de son constructeur, il est possible de créer un BufferedReader de façon suivante:
BufferedReader br =
     Files.newBufferedReader(Paths.get("/Volumes/Data/test/test.txt"));
Exemple: Utiliser la méthode readLine() de BufferedReader pour lire chaque ligne de texte.
test.txt
Java Tutorials:

Java Reader Tutorial
Java Writer Tutorial
BufferedReaderEx1.java
package org.o7planning.bufferedreader.ex;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class BufferedReaderEx1 {

    public static void main(String[] args) throws IOException {
        // Create Reader to read a file.
        Reader reader = new FileReader("/Volumes/Data/test/test.txt");

        // Create a BufferedReader with buffer array size of 16384 (32786 bytes = 32 KB).
        BufferedReader br = new BufferedReader(reader, 16384);
    
        String line = null;
        
        while((line = br.readLine())!= null) {
            System.out.println(line);
        }
        br.close();
    }
}
Output:
Java Tutorials:

Java Reader Tutorial
Java Writer Tutorial
Exemple: Utiliser BufferedReader pour lire une URL:
BufferedReaderEx2.java
package org.o7planning.bufferedreader.ex;

import java.io.BufferedReader;  
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;

public class BufferedReaderEx2 {

    public static void main(String[] args) throws IOException {
        
        URL oracleURL = new URL("https://www.oracle.com/");
        
        InputStream inputStream = oracleURL.openStream();
        
        // Create a Reader from its subclass InputStreamReader.
        Reader reader = new InputStreamReader(inputStream);
        
        BufferedReader br = new BufferedReader(reader);

        String inputLine = null;
        while ((inputLine = br.readLine()) != null) {
            System.out.println(inputLine);
        }
        
        br.close();
    }
}

4. lines()

Renvoyer un Stream, ses éléments sont les lignes de texte lues à partir de BufferedReader. Ce Streamest paresseux, la lecture ne se produit que lorsque l'utilisateur a absolument besoin des données.
public Stream<String> lines()
students.txt
# Students:

John P
Sarah M
# Sarah B
Charles B
Mary T
Sophia B
Exemple: Lire un fichier texte contenant une liste de noms des étudiants, supprimer les lignes de commentaires initiés par '#' et imprimer les lignes terminés par "B".
BufferedReader_lines_ex1.java
package org.o7planning.bufferedreader.ex;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.stream.Stream;

public class BufferedReader_lines_ex1 {

    public static void main(String[] args) throws IOException {
        
        Reader reader = new FileReader("/Volumes/Data/test/students.txt");
         
        BufferedReader br = new BufferedReader(reader, 16384);
    
         Stream<String>  stream = br.lines();  
        
         stream //
             .filter(line -> {
                 return !line.trim().startsWith("#") && line.endsWith("B");
             })  
             .forEach(System.out::println);    
            
         br.close();     
    }
}
Output:
Charles B
Sophia B

Tutoriels Java IO

Show More