Le Touilleur Express

  • Accueil
  • A propos de l’auteur
  • A propos du Touilleur Express
Next Previous

ByteArrayOutputStream: vive les buffers de taille variable

1 décembre, 2003

Le cas classique: vous êtes entrain de lire le contenu d’un fichier, ou vous téléchargez une page HTML dans votre programme. Simplement vous ne connaissez pas à l’avance la quantité de données, en conséquence de quoi vous ne pouvez pas de manière sûre alloué un buffer. Et bien grâce à la class java.io.ByteArrayOutputStream il est assez simple de lire des données sur un InputStream et d’écrire à la volée dans ce buffer vos données. La réallocation est effectuée en interne par le ByteArrayOutputStream.J’ai écris un petit exemple d’une class qui se connecte sur un site web, télécharge le contenu et retourne une String.

/* TestBytes  * Created by : nicmarti  * Date: 27-Nov-2003 - Time: 13:44:28  *  * Copyright (c) 2003 Nicolas Martignole  * All rights reserved.  */ package com.test.onsenfiche; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger;import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Properties;/** TestBytes est un exemple de l'utilisation de la class ByteArrayOutputStream.  * Cette class se connecte sur une URL specifiee, en telecharge le contenu  * puis retourne une String. L'interet du ByteArrayOutputStream est d'eviter  * de jongler avec des buffers de bytes pré-alloués. La gestion de la taille  * de ce buffer est transparente.  *  * @version 27-Nov-2003 13:44:28  * @author Nicolas Martignole  */ public class TestBytes {     static Logger logger = Logger.getLogger(TestBytes.class);/** Connect to the specified url and download its content      * @param url is a valid url      * @return a String that contains the whole HTML page      */     public static String getContentFromURL(String url) {         if (url == null) {             logger.fatal("No url was specified");             throw new RuntimeException("No url was specified");         }         try {             URL u = new URL(url);             logger.debug("URL: " + u.toExternalForm());             ByteArrayOutputStream buf = new ByteArrayOutputStream();             URLConnection conn = u.openConnection();             conn.connect();             logger.debug("Connected");             Reader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));             int c = -1;             logger.debug("Start to read the page");             while ((c = reader.read()) != -1) {                 buf.write(c);             }             logger.debug("Read done");             buf.close();             return new String(buf.toByteArray()); // -- tres utile         } catch (MalformedURLException e) {             logger.fatal("Malformed or invalid URL", e);         } catch (IOException e) {             logger.fatal("IOException", e);         }         return "ERROR-See log output";     }/** Main method, you will need log4j from apache in the classpath.      * @param args none      */     public static void main(String[] args) {         // Create a simple appender using a simple layout for Log4j         BasicConfigurator.configure();// Banner         logger.info("TestBytes starting");// For HTTP Proxy         Properties prop = System.getProperties();         prop.put("http.proxyHost", "proxy.XXXXXXX.fr"); // I removed the real hostname         prop.put("http.proxyPort", "8080");         //logger.debug(prop);// Connects to a web site and get the data.         logger.info(TestBytes.getContentFromURL("http://www.google.fr"));logger.info("Exit");     } }

Enfin si vous voulez relire le contenu de ce ByteArrayOutputStream vous pouvez aussi réutiliser un ByteArrayInputStream. Cela permet de rejouer par exemple avec les retour-chariots, une suite de commande sur un serveur telnet ou ftp. Enfin plus clairement, si vous avez un buffer de bytes (ou une String) vous pouvez relire le tout facilement via un ByteArrayInputStream.

0 no like

Articles similaires:

Default ThumbnailAdieu System.out.println, vive Log4J Default ThumbnailLog4J and ANSI colors in a xterm Default ThumbnailLog4J et log4j.xml Default ThumbnailEnvoyer des messages vers Twitter avec Log4J

Derniers articles

  • L’instant T où tu poses ta dém…

    Retour d’expérience sur la démission et le moment où vous devez quitter une entreprise.

    6 likes

    24 octobre, 2024
  • The « Robinson » projection – comprendre son système d’information

    Nous sommes en juillet 2022 chez Doctolib. Je travaille sur un projet

    5 likes

    22 octobre, 2024
  • Réussir son démarrage comme Staff/Principal Engineer dans une nouvelle entreprise

    Je prépare une présentation avec mon collègue Théotime pour la conférence Cloud

    3 likes

    6 octobre, 2024

Mots clés

Apple (32) Architecture (14) Big Data (5) Conference (8) Devoxx (55) Dev Web (37) Doctolib (2) geekevent (1) groovy (2) Innoteria (11) Java (517) Linux (10) Non classé (15) Perso (266) Recrutement (2) Scala (30) scrum (43) Société (3) Staff Engineer (5) Startup (21) Web 2.0 (67)

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur X (Twitter) : @nmartignole

Copyright© 2008 - 2024 Nicolas Martignole | Tous droits réservés
  • A propos de l’auteur
  • A propos du Touilleur Express
  • Reset Password

Le Touilleur Express