3 votes

Le moyen le plus rapide de copier du texte d'un fichier vers une réponse HttpServletResponse

J'ai besoin d'un moyen très rapide de copier le texte d'un fichier dans le corps d'une réponse HttpServletResponse.

En fait, je copie octet par octet dans une boucle, d'un BufferedReader vers response.getWriter(), mais je pense qu'il doit y avoir un moyen plus rapide et plus direct de le faire.

Merci !

5voto

Billy Bob Bain Points 2069

J'aime utiliser la méthode read() qui accepte un tableau d'octets, car vous pouvez modifier la taille et les performances.

public static void copy(InputStream is, OutputStream os) throws IOException {
      byte buffer[] = new byte[8192];
      int bytesRead;

      BufferedInputStream bis = new BufferedInputStream(is);
      while ((bytesRead = bis.read(buffer)) != -1) {
              os.write(buffer, 0, bytesRead);
      }
      is.close();
      os.flush();
      os.close();
}

4voto

Steve McLeod Points 19016

Il n'est pas nécessaire de faire ce travail vous-même. Il s'agit d'une exigence tellement courante qu'il existe des solutions open source, éprouvées et optimisées.

Apache Commons IO possède une classe IOUtils avec une série de méthodes de copie statiques. Vous pourriez peut-être utiliser

IOUtils.copy(reader, writer);

http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#copy(java.io.Reader, java.io.Writer)

2voto

ZZ Coder Points 36990

Voici comment je procède dans ma Servlet avec un tampon de 4K,

   // Send the file.
    OutputStream out = response.getOutputStream();
    BufferedInputStream is = new BufferedInputStream(new FileInputStream(file));
    byte[] buf = new byte[4 * 1024]; // 4K buffer
    int bytesRead;
    while ((bytesRead = is.read(buf)) != -1) {
        out.write(buf, 0, bytesRead);
    }
    is.close();
    out.flush();
    out.close();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X