2010-01-24 8 views
12

Aparte de una clase anónima (new OutputStream() { ... }), ¿alguien puede sugerir un equivalente moral de new FileOutputStream("/dev/null") que también funciona en Windows?receptor independiente de la plataforma/dev/null para Java

En caso de que alguien se pregunte '¿para qué sirve esto?'

Tengo un programa que realiza un análisis de coherencia en un archivo. Tiene una opción 'verbosa'. Cuando la opción verbosa está activada, quiero ver una gran cantidad de resultados. El programa no tiene prisa, es una herramienta, así que en lugar de escribir todas esas declaraciones extra if para probar si quiero el resultado, solo quiero escribirlo en el cubo de bits cuando no lo desee.

+0

¿Por qué no lo que desea descartar los datos? –

+0

@Tom Hawtin - edición editada para explicar. – bmargulies

+0

Bien. Pensé que tu "clase anónima" iba a hacer lo que @iseletsk sugirió. –

Respuesta

18

Puede utilizar NullOutputStream de apache commons https://commons.apache.org/proper/commons-io/javadocs/api-2.4/org/apache/commons/io/output/NullOutputStream.html

O simplemente poner en práctica su propia

package mypackage; 

import java.io.OutputStream; 
import java.io.IOException; 

public class NullOutputStream extends OutputStream { 
    public void write(int i) throws IOException { 
     //do nothing 
    } 
} 
+3

(Patrón de objeto nulo, un caso especial del patrón de casos especiales) (Añadiría una anulación (con @ Override) de 'write (int, int, byte [])' para un rendimiento agregado (aunque probablemente irrelevante). Siempre he usado una única instancia para el objeto nulo, pero supongo que puede tener problemas de bloqueo externo ('Reader'/'Writer's tiene un problema con decoradores aquí).) (Este comentario contiene un error deliberado.) –

+0

Buen punto sobre' @ Override', que captaría el error deliberado. – trashgod

+0

Me gustaría sobrescribir todos los métodos "write()". Supongo que la JVM podría ser lo suficientemente inteligente como para darse cuenta de que una escritura en bucle de una matriz sigue siendo un no-operativo y tratar esos como no-operaciones, también, pero odio depender de las optimizaciones de tiempo de ejecución de JVM. –

4

NUL funciona para Windows NT, pero eso no funciona en * NIX.

output = new FileOutputStream("NUL"); 

Un mejor uso de la NullOutputStreamCommons IO en lugar de ser independiente de la plataforma.

+1

NUL no funciona en Unix. Es un recuerdo de DOS. –

+0

Gracias por la confirmación. ¿No tenía una plataforma nix a la mano para probar :) – BalusC

+0

mente si edito para mantener solo la sugerencia de Commons IO? – bmargulies

Cuestiones relacionadas