¿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?

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.


¡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 {
  }
}

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




3

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


¿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!


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

Esto es específico de Windows.
Peterh

-4

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.