CHUNKEDXML, LIRE DU XML PAR MORCEAU

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 - 27 juin 2008 à 18:06
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 30 juil. 2008 à 19:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47136-chunkedxml-lire-du-xml-par-morceau

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
30 juil. 2008 à 19:47
Salut,

le code est de bonne qualité (+1 pour le commentaire de boumarsel), mais comme je maudit le XML je ne testerai pas...
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
4 juil. 2008 à 20:08
Merci ;o)
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
4 juil. 2008 à 13:25
Bonjour,

Je ne sais pas si ça a été dit ou non mais une chose que j'apprécie c'est le respect du standard pour la doc/commentaires dans le code.

Cordialement
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
2 juil. 2008 à 12:03
ouais je suis d'accord mais la c'est 4o
ya des classes ca pourrais etre BEAUCOUP plus

et 4o par ci, 4o par la ... ca monte vite
les optimisations que l'ont peu faire des le debut autant les faire ...
je ne sais pas comment se debrouille le GC dans ce cas mais il y a des chance que se soit plus rapide...
EagleUnderscoreOne Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 24 avril 2009
2 juil. 2008 à 10:57
C'est sûr que là on est en plein chipotage quand on voit la puissance des machines actuelles ça m'étonnerais qu'il y ait une différence mesurable entre les deux solutions...
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
2 juil. 2008 à 07:53
La c'est du chipotage.
Je fais un minimum confiance au compilateur. Et dans la mesure où il voit que cette variable, de type primitif, est utilisée dans la boucle, il me fera le privilège (Oh ! grand privilège ! Donnes moi une case mémoire siouplai...) de réserver l'espace nécessaire, sans l'allouer à chaque passage. Sinon ce n'est pas un bon compilateur (et toc !).
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
1 juil. 2008 à 21:14
# while (true) {
# int byteRead = this.stream.read();
tu le recre a chaque fois
apres certe c'est pas grand chose mais bon on prends vite l'habitude de toujours faire ca ...

sinon pour les break j'en demors pas :p certes ce n'est qu'un point de vu personnel mais je des que je peux faire sans je fais sans
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
1 juil. 2008 à 21:12
Les break, ils vont avec le while (true) ;o), c'est juste que tu n'es pas trop habitué à ce style d'écriture.
Un int alloué ? Tu voulais peut être dire un Integer.
L'allocation d'un int se fera plutôt dans la pile (gérée par la JVM) tandis qu'un objet aura plus de chance de se retrouver dans le tas (géré par le GC). Gagner un int ne fait pas gagner grand chose, à mon avis. Mais par contre, je ne vois pas où tu le gagnes.
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
1 juil. 2008 à 20:50
Ce qu'il manque principalement ce sont :
- la non prise en compte de l'IOException masque des erreurs
- la libération des ressources occupées par les propriétés des instances (la fermeture du fichier, la libération de la mémoire).

Sinon la différence entre un while (true) et un while (condition) c'est surtout une question d'habitude. Si le code contenu dans la boucle ne vérifie pas la ou les conditions de sortie, quelque soit la syntaxe, c'est une boucle sans fin.

L'intérêt principale de cette classe est qu'elle permet la lecture de fichiers xml volumineux, dans un minimum d'espace mémoire. Cette classe peut être utilisée avec un analyseur (parser), qui va demander les blocs xml au fur et à mesure pour transformer leur contenu en données ou en objets (désérialiser). Cette classe permet aussi de ne pas utiliser des librairies plus lourdes (SAX, JDOM, ...) lorsque ce n'est pas utile. Utiliser un tank pour ouvrir une porte en bois ce n'est pas l'idéal.
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
1 juil. 2008 à 20:41
ouaip des break qui servent a rien et qui a mon sens polluent le while de plus la je n'utilise qu'un int
dans la version original un int etait realloue a chaque fois ... "oui mais il y a le GC"
ce n'est pas une raison pour moi

il a demande les fautes de conception pour moi elles sont la
EagleUnderscoreOne Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 24 avril 2009
1 juil. 2008 à 11:27
Ouais enfin la description de la méthode c'est :
@return vrai ou faux selon qu'il reste des caractères dans le flux xml

Pour le while(true), ta solution revient au même finalement, c'est juste condensé en une ligne mais ce sont les mêmes opérations qui sont effectuées, une lecture, une assignation, un test. A la déclaration de variable à chaque pas de la boucle près, certes :p. Je vois pas, y'a un autre souci?
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
1 juil. 2008 à 11:09
# while (true) {
# int byteRead = this.stream.read();
# if (byteRead < 0) break;

=>
int byteRead ;
# while ((byteRead = this.stream.read()) > 0)
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
1 juil. 2008 à 11:07
non mais ca veux de toute facon dire qu'il ne peux plus lire ...
le while (true) pique les yeux

les close qu'il faudrais dans des finally

apres quant a l'utilite de la source je m'avance pas
EagleUnderscoreOne Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 24 avril 2009
30 juin 2008 à 13:30
Je sais pas, je connais rien en XML, mais rapidement, ça ça m'a l'air étrange :

# public boolean isAvailable() {
# try {
# return (this.stream.available() > 0);
# } catch(IOException e) {
# return false;
# }
# }
Si tu récupères une exception, c'est pas forcément parce qu'il n'y a plus de caractères dispos. Si?...
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
27 juin 2008 à 18:06
Quizz :

Parmi toutes les erreurs de conception de cette classe quelle est celle qui vous semble la pire ?
Rejoignez-nous