Demande d'aide pour optimiser un bout de code

Demande d'aide pour optimiser un bout de code - Java - Programmation

Marsh Posté le 23-12-2008 à 15:10:39    

Bonjour,
 
Voici le code en question :

Code :
  1. private String getResponseContent(java.net.HttpURLConnection openHttpConnection) throws IOException {
  2.         // Lire le flux HTTP
  3.         InputStream inputStream = openHttpConnection.getInputStream();
  4.         List<Byte> content = new ArrayList<Byte>();
  5.         byte data = (byte)inputStream.read();
  6.         while (data != -1) {
  7.             content.add(data);
  8.             data = (byte)inputStream.read();
  9.         }
  10.        
  11.         // Renvoyer le contenu après conversion en chaine de caractères  
  12.         byte[] test = new byte[content.size()];
  13.         Iterator<Byte> iterContent = content.iterator();
  14.         int index = 0;
  15.         while(iterContent.hasNext()) {
  16.             test[index++] = iterContent.next();
  17.         }       
  18. }


Le but est de renvoyer le flux sous forme de chaine de caractères.
Cette méthode fonctionne mais elle me parait "sale" et pas du tout optimisée.  
 
Comme je n'y connais pas grand chose dans ce domaine, je compte sur votre aide.
Merci d'avance.


---------------
Aussi haut qu'on monte, on finit toujours par des cendres
Reply

Marsh Posté le 23-12-2008 à 15:10:39   

Reply

Marsh Posté le 23-12-2008 à 17:14:09    

construis un BufferedInputStream dessus, et lis à grand coup de bytes.

Reply

Marsh Posté le 23-12-2008 à 18:14:45    

Souvent, on utilise uuencode et uudecode pour faire cela.

Reply

Marsh Posté le 28-12-2008 à 00:01:42    

merci, je modifierai çà après les vacances ;)


---------------
Aussi haut qu'on monte, on finit toujours par des cendres
Reply

Marsh Posté le 28-12-2008 à 14:15:21    

InputStreamReader fait la conversion byte => char avec le support d'un charset
tu rajoutes un BufferedReader pour accelerer les traitements.
tu effectues des append dans un stringbuffer car c'est le plus efficace pour les concats (je te laisse chercher pourquoi)
 
 

Code :
  1. String          sIn         = "";
  2. StringBuffer    sbIn        = new StringBuffer();
  3. BufferedReader  brIn        = new BufferedReader(new InputStreamReader(openHttpConnection.getInputStream()),"TON CHARSET" );
  4. while ((sIn = brIn.readLine()) != null){
  5.     sbIn.append(sIn);
  6. }
  7. brIn.close();
  8. return sbIn.toString();


tu peux faire des tests de perfs, tu va vite voir une différence entre ton impl et celle ci.
a toi de decouvrir ou lever ou lancer les exceptions.


Message édité par pop-pan le 28-12-2008 à 14:27:07

---------------
[VDS] rail vesa, bras ecran, support TV / [ACH] des machins
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed