Avatar ·

Comment convertir un InputStream en tableau byte[] en Java ? Toutes les méthodes

Bonjour à tous ! Je suis débutant en Java et j'ai rencontré un problème : je dois lire toutes les données d'un InputStream (par exemple, depuis un fichier ou une réponse HTTP) et les obtenir sous forme de tableau byte[]. Mais je ne sais pas comment faire correctement.

Voici ce que j'ai essayé :

InputStream input = new FileInputStream("data.bin");
byte[] data = ??? // Comment obtenir le tableau de bytes ?

Le problème est que InputStream ne me permet pas de connaître la taille des données à l'avance. La méthode available() ne retourne pas la taille totale, mais seulement ce qui est déjà disponible pour la lecture sans blocage. J'ai essayé de lire en boucle, mais le code devient maladroit et se casse souvent.

J'ai lu à propos de ByteArrayOutputStream, mais je ne comprends pas comment l'utiliser correctement. J'ai aussi entendu parler de readAllBytes() dans Java 9, mais mon projet est en Java 8. Veuillez m'indiquer une méthode universelle et fiable qui fonctionne dans toutes les versions de Java.

Important : j'ai besoin d'obtenir exactement un tableau de bytes, pas une chaîne.