IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Taille InputStream / méthode available


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut Taille InputStream / méthode available
    Bonjour,

    je recupere un inpustream, dont je voudrais mettre le contenu dans un byte[]

    Je n'arrive pas à déterminer la taille du inputstream pour créer le byte de la bonne taille :/

    J'ai trouvé la méthode available(), mais la description est particuliere, et je n'arrive pas à situer si cela marchera sans souci

    Notons qu'available() fonctionne différemment en fonction du type de ressource depuis laquelle on lit; c'est littéralement « le nombre de bytes qui peuvent être lus sans blocage. » Avec un fichier cela signifie le fichier entier, mais avec une autre sorte d'entrée cela ne pourra pas être possible, alors employez le judicieusement.
    Est ce judicieux d'utiliser available pour créer mon byte[] ?

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Arnard
    Est ce judicieux d'utiliser available pour créer mon byte[] ?
    Non car avaible() peut renvoyer un nombre inférieur à la taille totale des données. De plus selon l'implémentation elle peut tout simplement renvoyer 0...

    Le mieux dans ton cas est d'utiliser un ByteArrayOutputStream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public byte[] inputStreamToByteArray(InputStream in) {
     
    	ByteArrayOutputStream baos = new ByteArrayOutputStream();
    	byte[] buf = new byte[8092];
    	int len;
     
    	while ( (len=in.read(buf)) > 0 ) {
    		baos.write(buf, 0, len);
    	}
    	return baos.toByteArray();
    }
    a++

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Ca roule. Merci

  4. #4
    Membre confirmé Avatar de Kevin12
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] buf = new byte[8092];
    Pourquoi 8092 au lieu de 1 par exemple ?

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Je ne sais pas pourquoi j'ai marqué 8092 car en général on utilise 8192, ce qui représente 8 Kio, et qui correspond généralement à la taille par défaut des buffer...

    Mais c'est une valeur arbitraire libre à toi d'en changer ou de l'adapter selon la taille du fichier ou des données à lire.


    Par contre prendre une taille trop petite n'est pas intéressant. L'intérêt du buffer est de diminuer les opérations d'entrée/sortie qui sont couteuse.
    Si le buffer est trop petit tu vas faire plein d'appel système d'I/O et perdre en performance.
    Si le buffer est trop grand tu vas consommer plus de mémoire, pour un gain de perf qui ne sera pas très important voir minime.

    Pour de "petit" fichier un buffer de 8192 est généralement amplement suffisant.
    Pour des fichiers plus grand il peut être intéressant d'augmenter cette taille voir d'opter pour d'autre mode de chargement...


    a++

  6. #6
    Membre confirmé Avatar de Kevin12
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Par défaut
    Merci pour l'explication, c'est très claire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2012, 10h10
  2. Méthode de génération de clé RSA selon un taille désirée
    Par darkwall_37 dans le forum Mathématiques
    Réponses: 5
    Dernier message: 23/08/2012, 15h00
  3. Réponses: 4
    Dernier message: 04/08/2011, 16h10
  4. méthode adequate pour la taille d'un répertoire
    Par trueman dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/03/2007, 23h18
  5. InputStream.available()
    Par @ldehan dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 14/04/2006, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo