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

Langage Java Discussion :

Compression (classe Deflater)


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Compression (classe Deflater)
    Bonjour,
    Je compresse un texte, que j'ai auparavant codé en Base 64. Mon problème est que lorsque mon texte est trop court, ca ne compresse pas mais augmente la taille du fichier...
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String inputString = "le cheval court dans le pre";
    byte[] inputByte = inputString.getBytes();
     
    byte[] result1 = Base64.encode( inputByte);
     
    Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION);
    deflater.setInput(result1 , 0, result1.length);
    deflater.finish();
    byte[] buff = new byte[result1.length + 50];
    int size = deflater.deflate(buff);
    Merci d'avance pour votre aide.

  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
    Ce n'est pas un problème. C'est le fonctionnement normal d'un algorithme de compression. Cependant, pour reproduire ce phénomène, la longueur des données doit être vraiment très petite.
    Juste une précision : le résultat compressé est plus gros que le texte initial ou la conversion en base 64 ?
    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
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    La longueur des données est la phrase du début.
    Et après compression, le fichier est plus gros que celui en base 64 (et donc celui d'origine aussi car la conversion en base 64 m'augmente aussi la taille du fichier).
    Cependant, j'ai essayé en enlevant la conversion en base 64, et le résultat est aussi plus gros que ma chaine de caractère d'origine. Sauf si j'agrandi ma chaine de caractères...
    Pour moi, si il n'arrive pas a compresser, il devrait laisser la taille originale, ce qui n'est pas le cas.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    La plupart des algorithmes de conversion sont efficaces sur de plus grandes tailles de données. Crée par exemple une chaîne de 1k et vois si ton problème est toujours présent.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Oui ca je l'ai dit que ca marche si j'augmente ma chaine de caractères. Mais il y a donc pas de solution pour des petites chaines...?

  6. #6
    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
    Citation Envoyé par dell_hate Voir le message
    Mais il y a donc pas de solution pour des petites chaines...?
    Non. Tu choisis d'utiliser un algorithme de compression avec un certain format. En sortie, tu te retrouve avec le format choisi. C'est à toi, en amont, de vérifier si ça vaut le coup d'effectuer la compression.
    Pour information, tu devrais nous donner tous les chiffres que tu possèdes pour les relations taille fichier de départ -> taille fichier compressé.
    Enfin, tu dois réfléchir à la volumétrie de fichiers qui seront en dessous de la taille à partir de laquelle la compression est pire. Si le cas est rare, inutile de traiter un cas à part.
    A quoi vont servir ces fichiers compressés ? Sont-ils nombreux ?
    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.

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Ben par exemple pour un fichier de 113 octets à l'origine, j'arrive à 95 octets après compression. Mais pour un fichier de 27 octets à l'origine, je me retrouve avec 39 octets après compression.
    Le texte est sujet être converti en base 64, puis à être crypté. Ce qui m'augmente à chaque fois mon nombre de caractères mais pas assez pour avoir une compression si je part d'un fichier de 27 octes par exemple.
    Je pense que je vais simplement définir une taille en dessous de laquelle je n'effectuerais aucune compression.
    Merci pour les conseils.

  8. #8
    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
    Tu dois aussi prendre en compte le temps de compression.
    Pour déterminer la taille en dessous de laquelle tu ne compresses pas, tu dois comparer "temps de compression + transfert + temps de décompression" avec "transfert uniquement" en augmentant la taille du fichier jusqu'à avoir des temps égaux. Tu obtiendras ainsi la taille à partir de laquelle cela vaut le coup de compresser.
    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.

Discussions similaires

  1. Compression avec Mode DEFLATE
    Par dede92 dans le forum Apache
    Réponses: 3
    Dernier message: 14/06/2016, 07h10
  2. Activer la compression deflate via htaccess
    Par CaviarNAS dans le forum Apache
    Réponses: 4
    Dernier message: 17/03/2011, 13h37
  3. Compression deflate & url rewriting
    Par piero-la-lune dans le forum Apache
    Réponses: 2
    Dernier message: 30/12/2010, 10h00
  4. Compression HTTP Deflate
    Par rndhnqz dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 16/02/2009, 20h35
  5. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 16h51

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