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 :

BufferedInputStream read ou read(byte[])


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Points : 58
    Points
    58
    Par défaut BufferedInputStream read ou read(byte[])
    Hello

    Ma question est très simple, du point de vue de la rapidité d'exécution, il faut mieux récupérer chaque byte les uns après les autres ou récupérer plutot un tableau de byte à la fois. Si c'est le meilleure choix quelle serait la taille de ce tableau ?

    la question se pose aussi avec BufferedOutputStream...

    Merci pour l'info

    bonne journée

    gl0be

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Puisque les deux méthodes sont synchronisées, il est préférable de lire un tableau de bytes.
    Pour la taille du tableau, c'est à toi de faire tes propres benchs. Il n'y a pas de réponse standard, c'est du cas par cas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Tu aurais pu répondre à ta question en codant ces 2 cas.
    Personnellement j'ai eu de bons résultats avec un tableau byte[8192]. Ca dépend un peu du volume des fichiers que tu vas traiter.

    Pour l'output j'utilise directement le tableau complet.

    A noter qu'avec NIO, l'input se fait tout seul sans avoir soi-même à spécifier une taille de buffer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    		byte[] result = null;
    		FileInputStream fis = null;
    		FileChannel fc = null;
    		ByteBuffer bb = null;
    		try {
    			fis = new FileInputStream(inputFile);
    			fc = fis.getChannel();
    			bb = ByteBuffer.allocate((int) fc.size());
    			fc.read(bb);
    			result = bb != null ? bb.array() : null;
    		} catch (IOException e) {
    			s_logger.warn("IOException", e);
    		} finally {
    			if (fc != null) {
    				fc.close();
    			}
    			if (fis != null) {
    				fis.close();
    			}
    		}
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Points : 58
    Points
    58
    Par défaut
    Merci beaucoup de vos réponse !

    Pour finir le choisi d'utiliser plutot la classe BufferedReader / BufferedWriter car les données envoyées et reçues sont des chaînes de caractères...

    Merci encore

    gl0be

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

Discussions similaires

  1. BufferedInputStream.read(byte) très long
    Par druzy dans le forum Général Java
    Réponses: 9
    Dernier message: 12/07/2014, 14h23
  2. Vraie différence entre repeatable read et read commited ?
    Par Fanfaron dans le forum Langage SQL
    Réponses: 9
    Dernier message: 25/02/2014, 09h46
  3. NetworkStream.Read ne read pas.
    Par Kentin dans le forum C#
    Réponses: 2
    Dernier message: 29/07/2009, 15h54
  4. le passage de Startup read only à read write
    Par bestsuan dans le forum Administration
    Réponses: 2
    Dernier message: 03/09/2008, 14h10
  5. [Erreur] "Record(s) cannot be read; no read permission on 'DT'"
    Par ajuveneton dans le forum Sécurité
    Réponses: 1
    Dernier message: 30/05/2007, 12h03

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