2011-04-23 18 views
5

Estoy realmente confundido sobre el propósito de varias clases io, por ejemplo, si tenemos BufferedWriter, ¿por qué necesitamos un PrintWriter?¿Por qué necesita PrintWriter?

BufferedReader reader = new BufferedReader(new FileReader(file)); 
String line = null;  
while(s=br.readline()!=null) { 
     PrintWriter fs = new PrintWriter(new FileWriter(file)); 
     fs.println(s); 
} 

si el BufferedWriter no puede ayudar? Simplemente no entiendo la diferencia entre estas clases, ¿alguien me puede explicar?

+0

Nod, estas clases de Java IO "stream" son realmente confusas. Puedo asimilar fácilmente InputStream, OutputStream (solo bytes) y las versiones en búfer, pero más allá de eso se confunde. – seand

+0

Hay 2 razones principales por las cuales ese tipo de clases son diferentes: 1. Capacidades de almacenamiento en memoria intermedia 2. Capacidades adicionales en nuevas versiones de Java, que intentan no confundir sobre nuevos métodos existentes, sino crear una nueva clase induciendo al desarrollador para verificar el elemento JavaDoc '@since' –

Respuesta

6

No tienen nada que ver entre sí. En verdad, rara vez uso PrintWriter excepto para convertir System.out temporalmente. Pero de todos modos.

BufferedWriter, como BufferedReader/BufferedInputStream/BufferedOutputStream simplemente decora la Writer cerrado con un búfer de memoria (se puede especificar el tamaño) o aceptar un defecto. Esto es muy útil cuando se escribe en escritorios lentos, como red o archivo. (Las cosas se envían a la memoria y solo ocasionalmente al disco, por ejemplo) Al almacenar en la memoria la velocidad aumenta mucho; intente escribir un código que escriba para decir un archivo de 10 mb con solo FileWriter y luego compare con el mismo con BufferedWriter alrededor.

Eso es BufferedWriter. Se incluyen algunos métodos de conveniencia, pero sobre todo solo proporciona este búfer de memoria.

PrintWriter su mayoría es un decorador simple que añade algunos métodos de escritura específicas de varios tipos como String, float, etc, por lo que no tiene que convertir todo para bytes sin formato.

Editado:

This ya ha llegado

4

El PrintWriter es esencialmente una clase de conveniencia. Si desea abrir rápida y fácilmente una línea de texto, p. un archivo de registro, PrintWriter lo hace muy fácil.

tres características:

  • Los métodos print y println tomarán cualquier tipo de datos y hacer la conversión para usted. No solo String.
  • El relativamente nuevo método format vale su peso en oro. Ahora es tan simple en Java como en C generar una línea de texto con control de formato de estilo C.
  • ¡Los métodos nunca arrojan una excepción! Algunos programadores están horrorizados ante la posibilidad de que nunca escuchen que las cosas van mal. Pero si se trata de un programa desechable o de hacer algo realmente simple, la conveniencia puede ser agradable. Especialmente si la salida es a System.out o System.err que tienen pocas maneras de salir mal.
1

La razón principal para usar PrintWriter es obtener acceso a los métodos printXXX (como println (int)). Básicamente puede utilizar un PrintWriter para escribir en un archivo como lo haría con System.out para escribir en la consola.

Un BufferedWriter es una forma eficiente de escribir en un archivo (o cualquier otra cosa) ya que almacenará los caracteres en la memoria Java antes de escribir en el archivo.

Cuestiones relacionadas