web-dev-qa-db-fra.com

Java InputStream to ByteBuffer

Je lis les textures dds, mais depuis que j'ai construit le pot, je ne peux pas accéder à ces textures via url et file et je dois utiliser InputStream à la place.

Il me faudrait donc savoir comment obtenir un Java.​nio.ByteBuffer d'un Java.io.InputStream.

Ps: peu importe les bibliothèques de la 3e partie, j'ai juste besoin que ça marche

20
elect

Pour moi, le meilleur dans ce cas est Apache commons-io pour gérer cela et des tâches similaires.

Le type IOUtils a une méthode statique pour lire un InputStream et retourner un byte[].

InputStream is;
byte[] bytes = IOUtils.toByteArray(is);

En interne, cela crée un ByteArrayOutputStream et copie les octets dans la sortie, puis appelle toByteArray().

[~ # ~] mise à jour [~ # ~] : tant que vous avez le byte array, comme @ Peter pointé, vous devez convertir en ByteBuffer

ByteBuffer.wrap(bytes)

MISE À JOUR Java 9 : comme indiqué par @ saka1029 si vous utilisez Java 9 + vous pouvez utiliser l'API par défaut InputStream qui inclut désormais la fonction InputStream::readAllBytes , donc aucune bibliothèque externe requise

InputStream is;
byte[] bytes = is.readAllBytes()
35
Jordi Castilla