Esiste un flusso di output nullo in Java?


112

Devo specificare un OutputStreamper un'API che sto utilizzando, ma in realtà non ho bisogno dell'output. Java ha un OutputStreamequivalente a > /dev/null?

Risposte:


19

A partire da Java 11, esiste un'utilità statica che fa esattamente ciò di cui hai bisogno, un metodo di fabbrica statico OutputStream.nullOutputStream():

Restituisce un nuovo OutputStream che elimina tutti i byte. Il flusso restituito è inizialmente aperto. Lo stream viene chiuso chiamando il metodo close (). Le chiamate successive a close () non hanno effetto.


Fantastico, grazie per averlo fatto notare! Ma "da Java 11"? Penso che Java 11 sia uscito solo da una settimana.
Brandon Yarbrough

116
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}

15
Questo può anche essere facilmente implementato ovunque ne abbiate bisogno usando qualcosa del genere: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz




3

Non nella libreria standard AFAIK, ma non dovrebbe essere difficile crearne una sovrascrivendo la scrittura in OutputStream


Perché questo è stato downvoted? È davvero banale implementare questa soluzione, come McDowell ha mostrato sopra.
pdxleif



1

C'è un nuovo ragazzo in città, che si prende cura di questo come un incantesimo, solo poche righe di codice dovrebbero funzionare. Il suo JDK 11 e nullWriter () sono stati introdotti lì, che si occupa di questo. Ecco il codice per affrontare lo stesso vecchio problema, in modo nuovo senza preoccuparsi del sistema operativo (OS).

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

Spero che questo possa aiutare qualcuno!


0

Credo che questo sia quello che stai cercando, stavo cercando la stessa cosa: questo è per reindirizzare i flussi di output dall'errore standard, standard negli oggetti ProcessBuilder.

blockquote

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • Dom

Questo è specifico per Windows.
peterh

-4

ByteArrayOutputStreamè quello che vuoi (supponendo che l'API invierà testo). Basta istanziarne uno nuovo.


2
Questa è una cattiva idea perché accumulerai dati in memoria invece di buttarli via. E se lo scrittore scrive 15 GB di spazzatura sul tuo BAOS? Potrebbe succedere.
tratta bene le tue mod
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.