Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1435 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] I/O, zip, et botanique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] I/O, zip, et botanique

n°1520059
Jubijub
Parce que je le VD bien
Posté le 26-02-2007 à 13:09:37  profilanswer
 

Ca fait bien un an que j'ai pas touché de code java, et là je m'y remets, et ça fait drole...
 
J'ai fais ceci pour zipper des fichiers :  
 

Code :
  1. buffer = new byte[10000];
  2.  try {
  3.   ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(filename));
  4.   zip.setLevel(Deflater.BEST_COMPRESSION);
  5.   for (int i = 0;i < files.length;i++) {
  6.    FileInputStream file = new FileInputStream(files[i]);
  7.    zip.putNextEntry(new ZipEntry(files[i].getName()));
  8.    int length;
  9.    while ((length = file.read(buffer)) > 0) {
  10.     zip.write(buffer,0,length);
  11.    }
  12.    System.out.println("Fichier ajouté" );
  13.    zip.closeEntry();
  14.    file.close();
  15.   }
  16.   zip.close();


 
Je vous passe le code de débug et le choix pourri de nom de variables, ct juste un test quick and dirty...
 
Juste un truc que j'ai oublié, et que j'ai pas réussi à trouver dans l'API java, ni dans le java tutorial :  

Code :
  1. while ((length = file.read(buffer)) > 0) {
  2. zip.write(buffer,0,length);
  3. }


je suis pas sur de bien comprendre l'utilisation du buffer ici...c'est une zone tampon que mon input stream remplit, que mon outputstream vide...ce que je comprends pas bien c'est comment ca se gère en interne, parce que le code parait ridiculement simple par rapport à ce qu'il accomplit, à savoir remplir un buffer, le vide, quand il est vide le reremplit, etc...


---------------
Jubi Photos : Flickr - 500px
mood
Publicité
Posté le 26-02-2007 à 13:09:37  profilanswer
 

n°1520093
frabill
Posté le 26-02-2007 à 13:52:56  profilanswer
 

Je ne comprends pas trop ce qui te gêne dans ce code, mais il y a apparemment plus simple que de gérer ce buffer de bytes :
 
http://www.programmez.com/forum/vi [...] 5d051#1371

n°1520104
phnatomass
Je m'empare de ton esprit !!
Posté le 26-02-2007 à 14:00:57  profilanswer
 

L'utilisation d'un buffer est une stratégie classique dans les opérations de lecture/écriture en programmation qui n'est pas obligatoire mais qui a pour but d'améliorer les perfs.

n°1520111
Jubijub
Parce que je le VD bien
Posté le 26-02-2007 à 14:19:02  profilanswer
 

ma question c'est surtout comment java gère la soupe interne de remplir et vider le buffer...c'est ce qui m'a toujours chagriné avec les stream en java, c'est que c'est trop simple : pour bcp d'api, c'est à toi de gérer ce qui se passe, on t'aide juste à la faire...là il se passe plein de choses que je maitrise pas...


---------------
Jubi Photos : Flickr - 500px
n°1520181
phnatomass
Je m'empare de ton esprit !!
Posté le 26-02-2007 à 15:20:14  profilanswer
 

Cela dépend du stream que tu utilises.
Un BufferedOutputStream contient un buffer interne pour optimiser les acces entre la couche physique  de ton flux et tes data java.
Maintenant comme c'est un flux, pour limiter le nombre de boucles neccessaires pour la lecture utiliseras à ton tour un buffer pour récupérer le contenu du flux.

n°1520475
Jubijub
Parce que je le VD bien
Posté le 26-02-2007 à 19:24:20  profilanswer
 

tu veux dire que mon code sert à rien, je pourrais aussi bien passer par des bufferedStream et donc pas me taper moi même la gestion du buffer, c'est ça ?


---------------
Jubi Photos : Flickr - 500px
n°1520577
sircam
I Like Trains
Posté le 26-02-2007 à 22:16:45  profilanswer
 

C'est l'idée : si tu as à disposition un stream bufferisé, il est généralement conseillé de l'utiliser.

n°1521000
phnatomass
Je m'empare de ton esprit !!
Posté le 27-02-2007 à 15:06:09  profilanswer
 

Une petite précision.
Ton BufferedInputStream contient un buffer interne mais cela ne te dispense pas d'en utiliser un explicite comme dans ton programme pour limiter le nombre de fois que ta boucle de lecture s'effectuera.

n°1521078
Jubijub
Parce que je le VD bien
Posté le 27-02-2007 à 16:23:22  profilanswer
 

?!?!?
 
il me semble que si on utilise un bufferedStream, y'a un constructeur qui permet d'initialiser la taille du buffer, non ?
http://java.sun.com/j2se/1.4.2/doc [...] er,%20int)


---------------
Jubi Photos : Flickr - 500px
n°1521154
phnatomass
Je m'empare de ton esprit !!
Posté le 27-02-2007 à 17:25:12  profilanswer
 

T'as un fichier de 1000 cararctères.
Si tu utilise inpustream.read(), tu devras boucler 1000 fois pour lire tout ton fichier.
Indépendement que tu utilises un BufferedInpuStream ou non.
On est d'accord ?
Par contre le inputstream fera un nbre d'acces physique à ton fichier variable selon le fait qu'il soit bufferisé ou pas. Peu d'accès si c'est un BufferInputStream, bcp plus si c'est un FileInputStream simple.
Il y a 2 niveaux de buffer.
 
 

mood
Publicité
Posté le 27-02-2007 à 17:25:12  profilanswer
 

n°1521247
Jubijub
Parce que je le VD bien
Posté le 27-02-2007 à 19:47:09  profilanswer
 

ok... :)


---------------
Jubi Photos : Flickr - 500px
n°1521369
sircam
I Like Trains
Posté le 28-02-2007 à 08:55:19  profilanswer
 

phnatomass a écrit :

T'as un fichier de 1000 cararctères.
Si tu utilise inpustream.read(), tu devras boucler 1000 fois pour lire tout ton fichier.
Indépendement que tu utilises un BufferedInpuStream ou non.
On est d'accord ?


Ouais mais bon, mis à part le temps d'exécution de la boucle elle-même et le traitement caractère par caractère, supposés négligeables par rapport au temps I/O (si bien fait), pt de vue I/O, ça reste kiff : il n'y aura pas 1000 accès fichier si bufferisé.
 
J'dis pas qu'il faut faire comme ça, mais c'est pas forcément la cata. :o


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1521539
phnatomass
Je m'empare de ton esprit !!
Posté le 28-02-2007 à 11:29:59  profilanswer
 

Mais bon il y a un minimum de reflexe de bonne pratique à voir tout de même.

n°1521623
Jubijub
Parce que je le VD bien
Posté le 28-02-2007 à 12:38:40  profilanswer
 

question : comment déterminer une bonne taille de buffer ?


---------------
Jubi Photos : Flickr - 500px
n°1523592
cooltwan
Posté le 05-03-2007 à 10:15:55  profilanswer
 

adéquation entre la taille de tes fichiers et la mémoire de ta machine/jvm :D


Message édité par cooltwan le 05-03-2007 à 10:16:04
n°1524039
Jubijub
Parce que je le VD bien
Posté le 05-03-2007 à 18:32:15  profilanswer
 

et y'a des règles pour déterminer la bonne adéquation, ou c du pifomètre à base de "tant que ca plante pas et que c pas trop lent, j'ai bon ?" ?


---------------
Jubi Photos : Flickr - 500px

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] I/O, zip, et botanique

 

Sujets relatifs
[Java] Tomcat LogConfigurationException help!verifier fichier (extension, type mime...) depuis un applet java
[JAVA] gestion droits utilisateurssigner une applet java (jarsigner...)
[JAVA] mpossible de lancer le service Tomcat 5.5 sur Win2003Table sans primary key avec Hibernate/JAVA
[JSTL/JSP/JAVA] comment afficher la clé d'un .properties ? [Resolu][Java][Shell] Transfert de fichier par FTP
cherche livre java orienté web J2EElivres sur le java
Plus de sujets relatifs à : [Java] I/O, zip, et botanique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR