2012-02-29 8 views
23

Al leer acerca de Java I/O, me di cuenta de que hay dos formas de escribir en la salida estándar.Escribiendo a la consola con System.out y PrintWriter

A continuación se presenta el fragmento que utiliza tanto las técnicas

import java.io.*; 
public class ConsoleIO { 

    public static void main(String[] args) { 
     System.out.println("Method 1"); 

     PrintWriter writer = new PrintWriter(System.out); 
     writer.println("Method 2"); 
     writer.flush(); 
     writer.close(); 
    } 
} 

¿Hay beneficios en el rendimiento de la utilización de uno sobre el otro?

+2

hecho que sigue siendo que no importa qué técnica utilice, escribir en la consola siempre es costoso. – frewper

+0

Tenía curiosidad sobre la afirmación de frewper de que escribir en la consola es costoso. Lo he notado yo mismo, pero me pregunto * por qué *. El cortocircuito es el almacenamiento en búfer de E/S. Para una discusión más larga (centrada en Python) consulte la respuesta de Piët Delport en este hilo: http://stackoverflow.com/questions/3857052/why-is-printing-to-stdout-so-slow-can-it-be- acelerado # 3857543 – RegularlyScheduledProgramming

Respuesta

13

Un rápido Google reveló un hilo en Coderanch que fue útil.

Existen varias formas de escribir una consola, pero no parece haber ningún beneficio real de usar una u otra aparte de menos código para escribir y de que la creación de un nuevo objeto PrintWriter ocupará más memoria (eventualmente) .

PrintWriter puede escribir en otras fuentes aparte de la consola, puede escribir en una HttpResponse, por ejemplo, mientras System.out.println solo escribe en la consola.

2

No son solo dos formas, también puede encontrar otras formas de hacerlo. Por ejemplo, usando la clase Consol de paquete io, y algunas clases más pueden presentarse para esto.

Pero si solo quieres imprimir algo en la consola, entonces creo que el primer método es el mejor. ¿Por qué debería ir de 4 a 5 líneas de código si se puede hacer en solo 1 línea?

1

Uso:

System.out.println("Method 1"); 

Es una llamada estática, que es más rápido que la otra opción. Además, no crea ningún objeto adicional como el objeto PrinterWriter en la segunda opción.

13

diferente del enfoque de dos es:

  • Cuando se utiliza System.out.print("") en realidad se utilizó una instancia PrintStream.
  • En realidad, la diferencia es de dos clases PrintStream y PrintWriter que son:

    1. PrintStream es un flujo de bytes, mientras que PrintWrite es una cadena de caracteres.
    2. PrintStream usa la codificación predeterminada de la plataforma mientras que con el PrintWriter puede pasar un OutputStreamWriter con una codificación específica. para la muestra: PrintStream stream = new PrintStream(output); PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));

Puede seleccionar un enfoque con sus requerimientos.

1

El uso de PrintWriter hace que la salida sea internacionalizable, ya que se pueden especificar codificaciones como UTF-8. Las clases PrintWriter y PrintStream solo deben usarse para actividades como la salida de la consola, no para la programación en red, debido a su tratamiento dependiente de la plataforma de los saltos de línea y la deglución de las condiciones de excepción. El segundo capítulo de "Java Network Programming" tiene una buena discusión sobre esto.

Cuestiones relacionadas