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 :

S'informer de l'état d'écriture d'un fichier


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 22
    Par défaut S'informer de l'état d'écriture d'un fichier
    Bonjour,

    J'ai un souci pour connaitre l'état d'écriture d'un fichier.
    Plus clairement, j'ai une appli qui permet de compresser des fichiers quelconques.

    Au niveau de l’écriture je fais un read de 1024 sur le fichier et j'écris ces 1024 octets dans mon archive. C'est très rapide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static private void generateArchive(OutputStream out, InputStream in) throws IOException
    	{
    		byte buf[] = new byte[1024];
     
    		try {
    			for (int len = 0; (len = in.read(buf)) > 0;)
    				out.write(buf, 0, len);
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			in.close();
    		}
    	}
    J'ai ensuite voulu connaitre la progression(en %) de l'archive pour pouvoir en informer l'utilisateur et mon premier réflexe fut de faire un read de 1:

    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
     
    static private void generateArchive(OutputStream out, InputStream in, int fileLen) throws IOException
    	{
    		byte buf[] = new byte[1]; // buffer
    		int prog; // progression
     
    		try {
    			for (int len = 0, ct = 0; (len = in.read(buf)) > 0; ++ct) { // ct => counter; len => lenght
    				out.write(buf, 0, len);
    				prog = Math.round(((float)ct/ (float)fileLen) * 100);
                                    // prog étant la valeur en pourcentage a ce stade  (exemple: 50 %)
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			in.close();
    		}
    	}
    Mais comme vous pouvez vous en doutez, non seulement le read(1) est moche mais il est surtout 1024 fois plus lent.
    Donc est-ce que vous auriez un autre moyen de connaitre le l’état actuelle d’écriture sans perdre trop de vitesse ?

    merci.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 22
    Par défaut
    J'ai trouvé une solution à mon problème c'était tous bête. Il me suffit simplement d'incrémenter mon compteur de longueur retourner lu et retourné par le read.
    Tout en conservant le read(1024);

    Voici le code pour ceux qui se poseraient la question ou qui auraient fait face au même problème :

    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
     
    byte buf[] = new byte[1024];
    		int prog;
     
    		try {
    			for (int len = 0, ct = 0; (len = in.read(buf)) > 0;) 
                            {
    				out.write(buf, 0, len);
    				prog = Math.round(((float)(ct += len) / (float)fileLen) * 100);
                                    // fileLen => a parameter of function
                                    // prog => status(%)
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			in.close();
    		}

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 14/02/2010, 08h57
  2. Restitution des informations dans un état
    Par kissoum dans le forum IHM
    Réponses: 4
    Dernier message: 23/10/2008, 10h10
  3. WMI - information sur l'état d'un processus ?
    Par Timothy dans le forum VBScript
    Réponses: 1
    Dernier message: 07/08/2007, 11h14
  4. Afichage d'information dans un état
    Par ganjaaw dans le forum Access
    Réponses: 2
    Dernier message: 25/08/2006, 15h19
  5. Récupération d'informations dans un état
    Par Psychose dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/06/2006, 16h37

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