cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 2014
-
27 juin 2008 à 18:06
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 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.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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és694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 4 juil. 2008 à 20:08
Merci ;o)
boumarsel
Messages postés298Date d'inscriptionjeudi 12 juin 2003StatutMembreDernière intervention 9 juillet 20081 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és2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 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és30Date d'inscriptionmercredi 20 février 2008StatutMembreDernière intervention24 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és694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 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és2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 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és694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 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és694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 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és2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 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és30Date d'inscriptionmercredi 20 février 2008StatutMembreDernière intervention24 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és2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 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és2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 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és30Date d'inscriptionmercredi 20 février 2008StatutMembreDernière intervention24 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és694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 27 juin 2008 à 18:06
Quizz :
Parmi toutes les erreurs de conception de cette classe quelle est celle qui vous semble la pire ?
30 juil. 2008 à 19:47
le code est de bonne qualité (+1 pour le commentaire de boumarsel), mais comme je maudit le XML je ne testerai pas...
4 juil. 2008 à 20:08
4 juil. 2008 à 13:25
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
2 juil. 2008 à 12:03
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...
2 juil. 2008 à 10:57
2 juil. 2008 à 07:53
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 !).
1 juil. 2008 à 21:14
# 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
1 juil. 2008 à 21:12
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.
1 juil. 2008 à 20:50
- 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.
1 juil. 2008 à 20:41
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
1 juil. 2008 à 11:27
@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?
1 juil. 2008 à 11:09
# int byteRead = this.stream.read();
# if (byteRead < 0) break;
=>
int byteRead ;
# while ((byteRead = this.stream.read()) > 0)
1 juil. 2008 à 11:07
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
30 juin 2008 à 13:30
# 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?...
27 juin 2008 à 18:06
Parmi toutes les erreurs de conception de cette classe quelle est celle qui vous semble la pire ?