devstory

Le Tutoriel de Java BufferedInputStream

  1. BufferedInputStream
  2. mark() & reset()
  3. Examples

1. BufferedInputStream

BufferedInputStream est une sous-classe d'InputStream, utilisée aux fins de simplifier la lecture de texte à partir de flux d'entrée binaires (binary input streams) et d'améliorer les performances du programme.
Le principe de fonctionnement de BufferedInputStream est présenté dans l'illustration ci-dessous:
BufferedInputStream enveloppe à son intérieur un objet InputStream, qui lit automatiquement les données de l'origine (un fichier, par exemple) et les stocke dans buffer (la mémoire tampon) de BufferedInputStream.
BufferedInputStream remplace les méthodes qui héritent de sa classe parentale, comme read(), read(byte []),... pour s'assurer qu'elles manipuleront les données de la buffer plutôt que de l'origine (un fichier, par exemple).
Ce qu'on appelle "buffer" susmentionnée est effectivement un tableau de byte. L'objet InputStream (de BufferedInputStream) lira automatiquement les bytes à partir de l'origine pour stocker ce tableau.
BufferedInputStream lit les bytes à partir du tableau buffer et libère les positions lues. Ces dernières seront utilisées pour stocker les bytes nouvellement lus à partir de l'origine.
BufferedInputStream constructors
BufferedInputStream​(InputStream in, int size)

BufferedInputStream​(InputStream in)
  • Le constructeur BufferedInputStream(InputStream,int) crée un objet BufferedInputStream avec le tableau buffer ayant la taille spécifiée.
  • Le constructeur BufferedInputStream(InputStream) crée un objet BufferedInputStream avec le tableau buffer ayant la taille par défaut (taille = 8192).

2. mark() & reset()

Un aspect intéressant de BufferedInputStream est qu'il prend en charge mark() et reset(), deux méthodes héritées d'InputStream. Toutes les sous-classes InputStream ne prennent pas en charge ces deux méthodes. Vous pouvez convoquer la méthode markSupported() pour vérifier si les 2 méthodes ci-dessus sont prises en charge.
Voir mon explication détaillée sur les deux méthodes mark() et reset() dans l'article sur InputStream:

3. Examples

Pour créer un objet BufferedInputStream, il faut créer un objet InputStream pour lire les données à partir de l'origine (par exemple depuis File). Étant donné que InputStream est une classe abstraite, il faut la créer à partir de l'une de ses sous-classes.
Par exemple: Créer un BufferedInputStream dont la taille du tableau buffer est 16384. Cela signifie que la taille cette buffer est de 16384 bytes (16 KB).
// Create InputStream to read a file.
InputStream is = new FileInputStream("/Volumes/Data/test/test.txt");

// Create a BufferedInputStream with buffer array size of 16384 (16 KB).
BufferedReader br = new BufferedReader(is, 16384);
Créer un BufferedInputStream avec la taille du tableau buffer par défaut (8192), l'équivalent de 8192 bytes (8 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);
Par exemple: Utiliser BufferedInputStream pour lire un fichier.
test.txt
This is the Latin text
BufferedInputStreamEx1.java
package org.o7planning.bufferedinputstream.ex;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class BufferedInputStreamEx1 {

    // C:/test/test.txt
    private static String file_path = "/Volumes/Data/test/test.txt";
    
    public static void main(String[] args) throws IOException {
        File file = new File(file_path);
        InputStream is = new FileInputStream(file);

        BufferedInputStream bis = new BufferedInputStream(is);
        
        int code;
        while((code = bis.read())!= -1) {
            System.out.println(code +" " + (char)code);
        }
        bis.close();
    }
}
Output:
84 T
104 h
105 i
115 s
32  
105 i
115 s
32  
116 t
104 h
101 e
32  
76 L
97 a
116 t
105 i
110 n
32  
116 t
101 e
120 x
116 t
10
Exemple: Utiliser BufferedInputStream pour lire une URL, afin d'améliorer la performance du programme.
BufferedInputStreamEx2.java
package org.o7planning.bufferedinputstream.ex;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class BufferedInputStreamEx2 {
    private static String urlString = "https://s3.o7planning.com/images/smile-32.png";

    public static void main(String[] args) throws IOException {
        URL url = new URL(urlString);
        InputStream is = url.openConnection().getInputStream();

        BufferedInputStream bis = new BufferedInputStream(is);

        int code;
        while ((code = bis.read()) != -1) {
            System.out.print((char) code);
        }
        bis.close();
    }
}

Tutoriels Java IO

Show More