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

Servlets/JSP Java Discussion :

[Gzip] - Débutante - problème compression/decompression.


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    Par défaut [Gzip] - Débutante - problème compression/decompression.
    Bonjour,

    je rencontre un souci énervant, je ne suis pas une experte en JAVA, je me forme seule avec la javadoc, et je rencontre un souci.

    J'utilise 2 class codée par moi-même...
    1 qui compress en gzip
    1 qui décompresse en gzip.

    (Ce que je Gzip ? un ficher word.xml (Wxml oui oui Microsoft like) )

    Mon souci ?

    Quand je vérifie l'archive qui est crée ainsi : l'archive est corrompue.
    Et quand j'ouvre l'archive, sans essayer d'extraite, le fichier interne est effectivement d'une taille différente du fichier source.
    Déjà donc de ce point de vue, pas cool ça ne fonctionne pas.

    Mais le cas devient pire :
    par la suite le fichier (.xml) qui est décompressé est vide !!!...
    (bon en même temps conséquence évidente que la compression ne marche déjà pas.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        	boolean bGzip = OutilsZip.compress(inCheminFile, OutCheminFile);//  > test.xml // >> test.xml.tar.gz
        	boolean bUnGzip = OutilsZip.uncompress(OutCheminFile, inCheminFile+".xml"); //  > test.xml.tar.gz // >> test.xml.xml

    Dans OutilsZip.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    public static boolean compress(String iFilename, String oFilename){
            try {
            	Logger.debug("on compresse");
     
            	Logger.debug("in="+iFilename+"out="+oFilename); // retourne bien le nom des deux fichiers concernés dans mon log 
     
                    FileInputStream fis = new FileInputStream(iFilename);
            	GZIPOutputStream gos = new GZIPOutputStream(new FileOutputStream(oFilename));
     
            		File f = new File(iFilename);
            		Long L = new Long(f.length());
     
            		int i = L.intValue();
            		Logger.debug("taille du fichier en Long =" + i); // Me renvoie bien la taille de mon fichier XML de départ
     
     
                byte[] byt = new byte[i] ;
                int offset;
                while ((offset = fis.read(byt)) > 0) 
                {
                    gos.write(byt, 0, offset); 
                }
     
     
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     public static boolean uncompress(String iFilename, String oFilename){
            try {
            	Logger.debug("on décompresse");
     
            	Logger.debug("in="+iFilename+"out="+oFilename); // retourne bien le nom des deux fichiers concernés dans mon log 
     
                // Ouvre le fichier compresse
     
            	GZIPInputStream gis = new GZIPInputStream(new FileInputStream(iFilename));
                    OutputStream os = new FileOutputStream(oFilename);
     
     
                    File f = new File(iFilename);
                    Long L = new Long(f.length());
     
                    int i = L.intValue();
            	Logger.debug("taille du fichier en L =" + i); // me retourne Zéro !!! 
     
     
                // transfere les byte compresse vers le fichier de sortie
                byte[] buf = new byte[i];
                int offset;
                while ((offset = gis.read(buf)) > 0) 
                {
                    os.write(buf, 0, offset);
                }
     
     
                return true;
            } catch (IOException e) {
                e.printStackTrace();
     
                return false;
            }
        }


    Pour vos questions :

    "Pourquoi tu as choisi de faire [....completez par la mention de votre choix ...] ?"
    => parce que ça me semblait une bonne idée.

    Sinon je suis ouverte à toutes vos remarques, critiques, corrections...
    Merci à ceux qui prendrons le temps de me lire.

  2. #2
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    Juste une petite remarque : tu devrais penser à fermer tes streams.
    A la fin de compress:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fis.close();
    gos.close();
    A la fin de uncompress:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gis.close();
    os.close();

  3. #3
    Membre chevronné Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    En effet, l'erreur vient de la. Si tu ne fait aucun flush ni close sur tes flux, il n'écrit rien dedans.

Discussions similaires

  1. compression / decompression gzip
    Par lostsoul dans le forum Débuter
    Réponses: 8
    Dernier message: 26/01/2011, 02h13
  2. Réponses: 2
    Dernier message: 28/04/2004, 11h25
  3. [Débutant] Problème de déconnexion d'une page JSP
    Par amal9 dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 22/01/2004, 13h40
  4. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 15h28
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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