Java ByteArrayInputStream : Guide pratique pour lire des tableaux d'octets
Java ByteArrayInputStream : Guide pratique pour lire des tableaux d'octets
Qu'est-ce que ByteArrayInputStream ?
La classe ByteArrayInputStream, dans le package java.io, implémente InputStream et permet de traiter un tableau d'octets comme un flux d'entrée. Elle stocke en interne une copie du tableau fourni, permettant un accès aléatoire et une lecture efficace.
Note : Le flux lit depuis le tableau lui-même, pas depuis une source externe ; toutes les opérations sont basées en mémoire.
Créer un ByteArrayInputStream
Importez java.io.ByteArrayInputStream et instanciez-le. Vous pouvez lire tout le tableau ou une tranche.
ByteArrayInputStream input = new ByteArrayInputStream(byte[] tableau);
ByteArrayInputStream input = new ByteArrayInputStream(byte[] tableau, int debut, int longueur);
Le second constructeur lit longueur octets à partir de l'index debut.
Méthodes principales
read()
int read()– lit l'octet suivant, ou-1si fin atteinteint read(byte[] b)– remplit le tableau fourni avec des donnéesint read(byte[] b, int off, int len)– lit jusqu'àlenoctets dansbà partir de l'offsetoff
Exemple : Lecture d'octets
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] tableau = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(tableau)) {
System.out.print("Octets lus : ");
int valeur;
while ((valeur = input.read()) != -1) {
System.out.print(valeur + ", ");
}
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sortie
Octets lus : 1, 2, 3, 4,
available()
Renvoie le nombre d'octets encore disponibles sans blocage.
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] tableau = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(tableau)) {
System.out.println("Initialement : " + input.available());
input.read(); input.read();
System.out.println("Après 2 lectures : " + input.available());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sortie
Initialement : 4 Après 2 lectures : 2
skip()
Avance la position du flux du nombre d'octets demandé.
import java.io.ByteArrayInputStream;
public class Main {
public static void main(String[] args) {
byte[] tableau = {1, 2, 3, 4};
try (ByteArrayInputStream input = new ByteArrayInputStream(tableau)) {
input.skip(2);
System.out.print("Après skip : ");
int valeur;
while ((valeur = input.read()) != -1) {
System.out.print(valeur + ", ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sortie
Après skip : 3, 4,
close()
Fermer un ByteArrayInputStream est une opération nulle ; le flux reste utilisable. La méthode existe seulement pour la compatibilité d'API.
Autres méthodes utiles
| Méthode | Description |
|---|---|
mark(int readlimit) | Marque la position courante |
reset() | Revient à la dernière position marquée |
markSupported() | Renvoie toujours true |
finalize() | Assure la libération des ressources (sans effet pour cette classe) |
Pour l'API complète, voir la documentation officielle Java.
Java
- Techniques de copie de tableaux en Java : Guide complet
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- Maîtriser Java Scanner : Guide complet avec exemples pratiques