Le Touilleur Express

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

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.

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

  • Vis ma vie de Staff/Principal Engineer

    Suite de l’article précédent sur le Staff Engineer. Aujourd’hui, voyons un peu

    20 juillet, 2022
  • Inari

    Devenir Staff Engineer : comment et pourquoi ?

    Après une dizaine d’années en tant que développeur, vous serez un jour

    17 juillet, 2022
  • WeAreDevelopers 2022, conférence à Berlin – jour 1

    Il est 8h40, 19 degrés, vous êtes à Berlin. La queue dehors

    24 juin, 2022

Tweets @nmartignole

  •  @fanf42  Excellent 👌

    1 day ago
  • RT  @iambdxoul :  @TheHackersNews  Lmao

    2 days ago
  • RT  @PR0GRAMMERHUM0R : Finally a GPT feature useful for work https://t.co/8U9FSUwKg5 https://t.co/GkUIJi7qtW

    2 days ago

Mots clés

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

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur Twitter : @nmartignole

Copyright© 2008 - 2020 Nicolas Martignole | Tous droits réservés
  • A propos de l’auteur
  • A propos du Touilleur Express
  • Log In
  • My Account
  • My Profile
  • Reset Password

Le Touilleur Express