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 :

FileOutputStream plus performant


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut FileOutputStream plus performant
    Bonjour,

    Voila mon probleme , je suis en train de developper en java un logiciel qui genere un certain type de fichiers. Pour creer ces fichiers et les remplir je me sert d un fileOutPutStream , quand je recupere mes tableaus de bytes que je dois inserer dans le fichier , je me serts tout simplement de la methode write(byte []) Mais cette methode est tres longue quand je dois ecrire beaucoup de données, Est ce que quelqu un connaitrait le moyen pour acceler tout ça ?

    Petit detail , je n ai pas le droit d utiliser d inclure du C/C++ dans mon code.

    Merci d avance

  2. #2
    Membre éprouvé Avatar de Oui-Oui MB
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2005
    Messages : 111
    Par défaut
    Tu devrais peut-être rajouté un BufferedOutputStream par dessus ton FileInputStream...

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut
    En fait j ai deja essayé cette solution , ça ne me fait pas gagné beaucoup de temps. ( pardon j aurais du preciser ce que j avais deja essayé )

  4. #4
    Membre éprouvé Avatar de Oui-Oui MB
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2005
    Messages : 111
    Par défaut
    En même temps, si il y a vraiment beaucoup de donnée, c'est un peu normal que la fonction prenne un peu de temps...

    Si c'est un problème (par exemple une interface bloquée), tu peux passer par un thread qui écrira dans le fichier.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut
    C est pas un probleme d interface bloqué et je passe deja par un thread? ce qui me plairait c est de savoir s il existe un autre moyen que le classique fileouputstrean pour creer un fichier en java , un façon beaucoup plus rapide. Mais c est vrai que je suis peut etre en train de chercher quelque chose qui n existe pas...

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    A part regarder du côté des nio ou utiliser un buffer de bytes plus grand je ne vois pas trop...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre éprouvé Avatar de Oui-Oui MB
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2005
    Messages : 111
    Par défaut
    Ca reviendrais au même, il faut quand même inscrire tous les bytes dans le fichier donc si il y a plein plein de bytes, ca prendra plus de temps forcément.

  8. #8
    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,

    Quel est le type de fichier que tu génères ? Quelle taille fait-il ?
    Quel est la taille de tes tableaux de byte ?
    On pourrait voir le code d'écriture ?

    a++

  9. #9
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut
    Je construit des Fichiers .enc ( c est des fichiers permettant de faire de l analyse de capture reseau, lu par Ethereal entre autre) j y met des tableaux de bytes de taille 128 Bytes au minimum, j ai au minimum 6800 tableaux de cette taille a ecrire, pour l instant ça met a peu pres 40s pour le faire.

    Pour mon code , c est du classique

    byte[] pBytes = p.getBytes();
    bos.write(pBytes);

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 5
    Par défaut
    pardon j oubliais , les fichiers constitués sont entre 1Mo et 15Mo

  11. #11
    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
    Heu... Tu es sûr que le problème vient du FileOutputStream ??? Tu as mis des traces dans ton applications pour voir ce qui prennait le plus de temps ?

    a++

  12. #12
    Membre éprouvé Avatar de Oui-Oui MB
    Homme Profil pro
    Architecte technique
    Inscrit en
    Avril 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Avril 2005
    Messages : 111
    Par défaut
    Si pour 1 tableau tu instancies un FileOutputStream et que tu écrits dedans, ca implique aussi une ouverture de fichier, une écriture et une fermeture.

    Par contre, si tu as ouvert le flux avant la boucle pour écrire, il faut voir comme adiGuba a dit : faire des traces pour savoir ce qui prend le plus de temps.

  13. #13
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Ben bufferize plus et essaie d'écrire des tableau de bytes d'une taille comprise entre 1024 et 8192 (= 1024 x 8 ) octets, voir un peu plus.
    L'un des facteurs possibles d'un ralentissement (outre l'ouverture/fermeture multiple du fichier) ca peut être des buffers trop petits ou trop gros.
    Ah oui et essaie (si possible) de réutiliser le même tableau sur plutot que d'en allouer un nouveau à chaque fois.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Réponses: 31
    Dernier message: 22/04/2014, 14h55
  2. Timer plus performant avec MMSystem
    Par gobgob dans le forum Delphi
    Réponses: 4
    Dernier message: 07/07/2006, 13h23
  3. [StringGrid - DrawGrid] Lequel est le plus performant ?
    Par xenos dans le forum Composants VCL
    Réponses: 3
    Dernier message: 01/01/2006, 18h09
  4. DB2 Peut-on remplacer le FETCH FIRST par plus performant?
    Par souellet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2005, 17h07
  5. Quel est le plus performant?
    Par trotters213 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/03/2005, 14h23

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