¿Existe un OutputStream nulo en Java?

112

Necesito especificar una OutputStreampara una API que estoy usando, pero en realidad no necesito la salida. ¿Java tiene un OutputStreamequivalente a > /dev/null?

Brandon Yarbrough
fuente

Respuestas:

19

Desde Java 11, existe una utilidad estática que hace exactamente lo que necesita, un método de fábrica estático OutputStream.nullOutputStream():

Devuelve un nuevo OutputStream que descarta todos los bytes. La secuencia devuelta está inicialmente abierta. La secuencia se cierra llamando al método close (). Las posteriores llamadas a close () no tienen ningún efecto.

leventov
fuente
¡Genial, gracias por señalar eso! ¿Pero "desde Java 11"? Creo que Java 11 solo ha estado disponible durante una semana.
Brandon Yarbrough
116
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}
McDowell
fuente
15
Esto también se puede implementar fácilmente donde lo necesite usando algo como esto: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz
15

Rehaciendo las respuestas ya proporcionadas -

Java no tiene una NullOutputStreamclase. Sin embargo, puede rodar el suyo OutputStreamque ignore cualquier dato escrito en él, en otras palabras write(int b), write(byte[] b)y write(byte[] b, int off, int len)tendrá cuerpos de método vacíos. Esto es lo que hace la NullOutputStreamclase Common IO .

Vineet Reynolds
fuente
3

No en la biblioteca estándar AFAIK, pero no debería ser difícil crear una anulando la escritura en OutputStream

Uri
fuente
¿Por qué esto fue votado en contra? De hecho, es trivial implementar esta solución, como McDowell mostró anteriormente.
pdxleif
1

Hay un chico nuevo en la ciudad, que se encarga de esto como un encanto, solo unas pocas líneas de código deberían funcionar. Allí se ha introducido su JDK 11 y nullWriter () , que se encarga de esto. Aquí va el código para lidiar con el mismo problema anterior, una nueva forma sin preocuparse por el sistema operativo (SO).

String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();

¡Espero que esto pueda ayudar a alguien!

Chico rojo
fuente
0

Creo que esto es lo que está buscando, yo estaba buscando lo mismo: esto es para redirigir los flujos de salida del error estándar, estándar en los objetos ProcessBuilder.

Blockquote

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • Dom
Dominik
fuente
Esto es específico de Windows.
Peterh
-4

ByteArrayOutputStreames lo que desea (asumiendo que la API generará texto). Simplemente crea una instancia nueva.

gostone
fuente
2
Esta es una mala idea porque acumulará datos en la memoria en lugar de tirarlos. ¿Qué pasa si el escritor escribe 15 GB de basura en su BAOS? Podría ocurrir.
trata bien a tus mods