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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[JAVA] Parser MIME (JavaMail)

n°202912
benou
Posté le 27-08-2002 à 15:20:54  profilanswer
 

Reprise du message précédent :

redant a écrit a écrit :

même si je trouve un moyen de l'appeler ça résoud pas mon problème de savoir ce que je lui donne en entrée




[:tonton_benou]  

Code :
  1. new ByteArrayInputStream(taString.getBytes());


Message édité par benou le 27-08-2002 à 15:21:10
mood
Publicité
Posté le 27-08-2002 à 15:20:54  profilanswer
 

n°202916
bobuse
Posté le 27-08-2002 à 15:26:02  profilanswer
 

--greg-- a écrit a écrit :

tu parles tout seul? :)




oups, ma souris a fourché :D

n°202918
--greg--
Posté le 27-08-2002 à 15:27:44  profilanswer
 

benou a écrit a écrit :

 
[:tonton_benou]  

Code :
  1. new ByteArrayInputStream(taString.getBytes());





benou, utiliser les byte arrays, ce ne serait pas, des fois, aller au devant d'éventuels problèmes d'encodage?
je dis ça comme ça hein, c'est juste que ça me fait un peu peur moi :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°202931
redant
Posté le 27-08-2002 à 15:40:46  profilanswer
 

tiens c'est amusant un collègue vient de me proposer ta solution
benou avec le ByteArrayInputStream.
 

Citation :

benou, utiliser les byte arrays, ce ne serait pas, des fois, aller au devant d'éventuels problèmes d'encodage?


 
pourrais-tu expliciter ?

n°202933
benou
Posté le 27-08-2002 à 15:41:23  profilanswer
 

il veut un InputStream, je lui donne un Inputstream.
 
Le problème d'encodage peut se produire mais ca vient du fait que, en entrer, c'est un InputStream qu'ils prennent.
 
Le InputStream te permet de récupérer des bytes => il faut transformer ta String en bytes, d'une manière ou d'une autre. Et c'est là que le problème peut se poser : au moment où ils vont retransformer les bytes en char.
Moi j'aurais plutot attendu un Reader en paramètre de la méthode. Ca aurait été plus logique vu que du MIME c'est du texte ...

n°202937
--greg--
Posté le 27-08-2002 à 15:43:53  profilanswer
 

benou a écrit a écrit :

il veut un InputStream, je lui donne un Inputstream.
 
Le problème d'encodage peut se produire mais ca vient du fait que, en entrer, c'est un InputStream qu'ils prennent.
 
Le InputStream te permet de récupérer des bytes => il faut transformer ta String en bytes, d'une manière ou d'une autre. Et c'est là que le problème peut se poser : au moment où ils vont retransformer les bytes en char.
Moi j'aurais plutot attendu un Reader en paramètre de la méthode. Ca aurait été plus logique vu que du MIME c'est du texte ...
 



oué. remarque avec le getBytes de String, tu peux spécifier un encodage... l'ennui c'est que l'encodage tu ne le connais qu'apres avoir commencé a lire les header du message nan? [:ddr555]


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°202939
benou
Posté le 27-08-2002 à 15:46:48  profilanswer
 

--greg-- a écrit a écrit :

oué. remarque avec le getBytes de String, tu peux spécifier un encodage... l'ennui c'est que l'encodage tu ne le connais qu'apres avoir commencé a lire les header du message nan? [:ddr555]




ben nan : si lui il a une String, la chaine est déjà encodée ...  
Par contre, quand il fait le getBytes, je ne sais pas si il écupère les bytes suivant l'encodage d'origin ou suivant l'encodage par défaut de l'OS ...

n°202945
--greg--
Posté le 27-08-2002 à 15:51:54  profilanswer
 

euh je voulais parler de  

byte[] getBytes(String enc)  
          Convert this String into bytes according to the specified character encoding, storing the result into a new byte array.


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°202949
benou
Posté le 27-08-2002 à 15:55:14  profilanswer
 

--greg-- a écrit a écrit :

euh je voulais parler de  

byte[] getBytes(String enc)  
          Convert this String into bytes according to the specified character encoding, storing the result into a new byte array.






j'avais bien compris ...

n°202955
--greg--
Posté le 27-08-2002 à 15:58:05  profilanswer
 

benou a écrit a écrit :

 
j'avais bien compris ...



euh ok pas moi alors :/


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
mood
Publicité
Posté le 27-08-2002 à 15:58:05  profilanswer
 

n°203118
redant
Posté le 27-08-2002 à 17:31:39  profilanswer
 

bon, c cool ça marche.
Merci à tous pour vos contributions pertinentes.
 
Par contre, gros problème de performance:
 
récupérer 150 news sur le même serveur:
 
-Outlook Express: 4 secondes
-Mon appli: 2 minutes   :(  
 
 
 Je crois que j'ai encore du boulot  :lol:


Message édité par redant le 27-08-2002 à 17:31:55
n°203184
darklord
You're welcome
Posté le 27-08-2002 à 18:02:56  profilanswer
 

redant a écrit a écrit :

nan, JavaMail ne permet pas d'aller chercher les news NNTP




 
 :heink:

n°203185
darklord
You're welcome
Posté le 27-08-2002 à 18:03:24  profilanswer
 

bon pour etre plus précis, j'ai comme un doute et je m'en vais vérifier cela asap

n°203189
darklord
You're welcome
Posté le 27-08-2002 à 18:04:47  profilanswer
 

http://www.dog.net.uk/knife/
 
par exemple ...
 
Il te suffit d'avoir un provider nntp dans ta config javamail et c'est faisable. C'est UN PEU comme JDBC et les drivers DB (tu as un provider IMAP, SMTP, etc).
 
http://www.jguru.com/faq/subtopic.jsp?topicID=110903
 
te donnera de meilleurs infos
 
A+


Message édité par darklord le 27-08-2002 à 18:05:21
n°204483
redant
Posté le 29-08-2002 à 11:18:22  profilanswer
 


 :hello:  
 
merci pour ta doc elle m'a permis de mieux comprendre le fonctionnement de JavaMail.
 
Cependant j'ai toujours un gros problème de performance dont je n'arrive pas à comprendre la cause.
 
Voici comment je communique avec le serveur NNTP:
 
 

Code :
  1. socket=new Socket(host,119);
  2. fromServer=new BufferedReader(new InputStreamReader(socket.getInputStream()));
  3. toServer=new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true);


 
Pour envoyer une commande au serveur:
 

Code :
  1. toServer.println("ma commande NNTP" );


 
Pour recevoir sa réponse:
 

Code :
  1. String serverResponse = fromServer.readLine();


 
Y a-t-il quelque chose qui ne va pas dans ma façon de procéder ?
 
 
 

n°204487
darklord
You're welcome
Posté le 29-08-2002 à 11:21:41  profilanswer
 

bin il me semble que tu es VACHEMENT bas niveau. Es tu sur que il n'y a pas une méthode plus standard que de jouer avec des socket et envoyer des commandes?

n°204493
redant
Posté le 29-08-2002 à 11:27:21  profilanswer
 


Je sais que je suis bas niveau mais c'est mon boss qui me l'a demandé afin d'avoir la maîtrise la plus grande possible sur mon appli.
 
De plus étant donné qu'il ne veut rien venant de l'extérieur je n'ai rien trouvé dans le jdk standard me permettant de faciliter la tâche.
 
Il y a un truc que je ne comprends pas. Généralement quand tu développes un truc bas-niveau étant donné que tu fais exactement ce que tu veux (et rien de plus) les performances sont au rendez-vous. Ici c'est le contraire  :cry:

n°204502
darklord
You're welcome
Posté le 29-08-2002 à 11:43:06  profilanswer
 

bin alors vire javamail et fais ta propre implémentation d'un client NNTP  :sarcastic:  
 
C'est là, c'est gratuit, c'est testé, y a une communauté derrière et y a encore des cons pour demander de réinventer la roue pour la Xème fois. Moi ca me dépasse.
 
Bonne chance :)

n°208701
redant
Posté le 04-09-2002 à 16:31:18  profilanswer
 


Pour essayer d'améliorer les perfs de mon crawler je l'ai passé sous OptimizeIt pour voir ce qui ne va pas.
 
Il me dit que mon appli passe 70% du temps d'exécution à attendre sur la méthode read() qui bien sur est bloquante.
 
Je me suis donc dis que je pourrais paralléliser mon appli en faisant du multithreading. J'ai donc désormais plusieurs threads qui parcourent les newsgroup et qui récupèrent leur contenu.
 
Ce que je n'arrive pas à faire (je débute avec les threads)c'est récupérer la valeur de retour de chacun d'entre-eux (un Vector qui contient les news récupérées par le thread)
 
merci d'avance,
 

n°208703
benou
Posté le 04-09-2002 à 16:34:08  profilanswer
 

la valeur de retour d'un thread  :??:

n°208704
darklord
You're welcome
Posté le 04-09-2002 à 16:34:46  profilanswer
 

pour ta méthode read bloquante tu dois faire la chose suivante:
 

Code :
  1. // tu viens de créer ta socket sock
  2. sock.setSOTimeout(500); // timeout au bout de 500 msec


 
et dans ta thread
 

Code :
  1. private Object sleepObject = new Object();
  2. public void run() {
  3.    // init stuff
  4.    while(pasfini) {
  5.      try {
  6.         in.read ...
  7.         // faire tes brols avec ce que tu as lus
  8.      }
  9.      catch (InterruptedIOException ie) {
  10.        // au bout de 500 msec rien à lire donc je dors un peu
  11.      }
  12.      synchrnized(sleepObject) {
  13.        sleepObject.wait(300); // dodo pdt 300msec
  14.      }
  15.    }
  16. }


 
Enfin ca ca va alléger ta consommation de ressources. Pour le reste je ne sais pas en détails comme c'est implémenté donc je peux pas te filer plus d'infos.


---------------
Just because you feel good does not make you right
n°208705
darklord
You're welcome
Posté le 04-09-2002 à 16:36:27  profilanswer
 

benou a écrit a écrit :

la valeur de retour d'un thread  :??:  




 
j'espère qu'il n'initialise pas un thread chaque fois qu'il doit lire une news :ouch:


---------------
Just because you feel good does not make you right
n°208709
--greg--
Posté le 04-09-2002 à 16:37:51  profilanswer
 

tiens ça me dit qqch ce bout de code :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
n°208714
darklord
You're welcome
Posté le 04-09-2002 à 16:40:34  profilanswer
 

--greg-- a écrit a écrit :

tiens ça me dit qqch ce bout de code :D




 
[:ddr555]


---------------
Just because you feel good does not make you right
n°208716
redant
Posté le 04-09-2002 à 16:42:18  profilanswer
 


Citation :

j'espère qu'il n'initialise pas un thread chaque fois qu'il doit lire une news


 
nan je vous rassure, le serveur me dit que les id des articles accessibles sont compris entre deux valeurs
 
par exemple:
 
de 150 à 3000
(150 étant l'id de la news la plus ancienne et 3000 la plus récente)
 
Je découpe alors l'intervalle en plusieurs plages et je fais examiner chaque plage par un thread qui récupère les news et les met dans un Vector. Mon problème est de savoir comment récupérer les Vector de chaque thread.

n°208720
benou
Posté le 04-09-2002 à 16:47:22  profilanswer
 

DarkLord a écrit a écrit :

Enfin ca ca va alléger ta consommation de ressources. Pour le reste je ne sais pas en détails comme c'est implémenté donc je peux pas te filer plus d'infos.




mais bon, en même temps lui ce qu'il veut c'est que ca aille plus vite, donc un sleep c'est pas forcément une bonne idée ... :/

n°208724
darklord
You're welcome
Posté le 04-09-2002 à 16:51:39  profilanswer
 

benou a écrit a écrit :

 
mais bon, en même temps lui ce qu'il veut c'est que ca aille plus vite, donc un sleep c'est pas forcément une bonne idée ... :/




 
si tu lis bien le code, le sleep ne vient que si il n'y a rien à lire ...


---------------
Just because you feel good does not make you right
n°208727
benou
Posté le 04-09-2002 à 16:55:22  profilanswer
 

DarkLord a écrit a écrit :

 
si tu lis bien le code, le sleep ne vient que si il n'y a rien à lire ...




j'ai beau bien le lire ...  :heink:  
 
si encore le sleep était dans le catch ... et puis je vois pas l'intérêt du synchronized  ...

n°208728
darklord
You're welcome
Posté le 04-09-2002 à 16:55:47  profilanswer
 

oui, autant pour moi y a une bloc {} mal mis


---------------
Just because you feel good does not make you right
n°208731
darklord
You're welcome
Posté le 04-09-2002 à 16:57:30  profilanswer
 

benou a écrit a écrit :

 
 et puis je vois pas l'intérêt du synchronized  ...




 

Citation :


public final void wait()
                throws InterruptedExceptionCauses current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object. In other word's this method behaves exactly as if it simply performs the call wait(0).  
The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until another thread notifies threads waiting on this object's monitor to wake up either through a call to the notify method or the notifyAll method. The thread then waits until it can re-obtain ownership of the monitor and resumes execution.  
 
This method should only be called by a thread that is the owner of this object's monitor. See the notify method for a description of the ways in which a thread can become the owner of a monitor.
 
 


---------------
Just because you feel good does not make you right
n°208735
benou
Posté le 04-09-2002 à 17:01:20  profilanswer
 

pkoi tu fais pas un this.sleep(300) plutot ?

n°208751
darklord
You're welcome
Posté le 04-09-2002 à 17:08:33  profilanswer
 

benou a écrit a écrit :

pkoi tu fais pas un this.sleep(300) plutot ?




 
parce que tu dois avoir une référence vers ta thread et que qd ton objet étends Runnable bin tu n'as pas accès à cette méthode.
 
Créer une thread et faisant extends Thread c'est BAD.


---------------
Just because you feel good does not make you right
n°208770
benou
Posté le 04-09-2002 à 17:13:09  profilanswer
 

DarkLord a écrit a écrit :

 
 
parce que tu dois avoir une référence vers ta thread et que qd ton objet étends Runnable bin tu n'as pas accès à cette méthode.
 
Créer une thread et faisant extends Thread c'est BAD.




bha ... je vois pas ce que ca a de mal ...
 
et puis en plus tu peux faire Thread.currentThread().sleep(300)
 
 :kaola:


Message édité par benou le 04-09-2002 à 17:13:28
n°208772
darklord
You're welcome
Posté le 04-09-2002 à 17:13:32  profilanswer
 

benou a écrit a écrit :

 
et puis en plus tu peux faire Thread.currentThread().sleep(300)




 
encore plus bad


---------------
Just because you feel good does not make you right
n°208787
benou
Posté le 04-09-2002 à 17:21:15  profilanswer
 

DarkLord a écrit a écrit :

 
 
encore plus bad




 :( pkoi ???

n°209061
darklord
You're welcome
Posté le 05-09-2002 à 09:00:00  profilanswer
 

pake :)


---------------
Just because you feel good does not make you right
n°209075
benou
Posté le 05-09-2002 à 09:10:21  profilanswer
 

DarkLord a écrit a écrit :

pake :)



:o  
comment se compliquer la vie pour rien ... :sarcastic:

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[Java] Interception des évènements clavier sur un composant DisabledPB d'applet java
applet java pour la gestion de fichiers[java] design... hashmap à 2 clés !?
[Java] lecture de fichiers XML[Java] Probleme de comprehension avec l'API Cryptix (maj : resolu)
[Java] Soucis de connexion Oracle 9.1 avec Weblogic 6.1[C] A votre bon coeur, aidez moi a parser ca (resolu)
[java] "partager" un singleton ... euh...[java] dessiner une image ailleurs que dans paint()
Plus de sujets relatifs à : [JAVA] Parser MIME (JavaMail)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)