Devo specificare un OutputStream
per un'API che sto utilizzando, ma in realtà non ho bisogno dell'output. Java ha un OutputStream
equivalente a > /dev/null
?
Devo specificare un OutputStream
per un'API che sto utilizzando, ma in realtà non ho bisogno dell'output. Java ha un OutputStream
equivalente a > /dev/null
?
Risposte:
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.
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
@Override
public void write(int b) throws IOException {
}
}
OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Java non sembra, ma Apache Commons IO sì. Dai un'occhiata a quanto segue:
Spero che aiuti.
Non è ancora detto, quindi mi aggiungo anche Guava 's ByteStreams . nullOutputStream () , poiché alcuni potrebbero preferire Guava su Apache Commons IO o averlo già nel loro progetto.
Nota: se utilizzi una versione precedente di Guava (dalla 1.0 alla 13.0), desideri utilizzare com.google.io.NullOutputStream .
Rifacendo le risposte già fornite -
Java non ha una NullOutputStream
classe. È tuttavia possibile OutputStream
eseguire il rollio del proprio che ignora i dati scritti su di esso, in altre parole write(int b)
, write(byte[] b)
e write(byte[] b, int off, int len)
avrà corpi di metodo vuoti. Questo è ciò che fa la NullOutputStream
classe Common IO .
No, ma è abbastanza facile da implementare.
Vedi questa domanda "Come rimuovere System.out.println da codebase"
E poi devi solo:
System.setOut( DevNull.out );
O qualcosa di simile :)
Java 11 ha aggiunto OutputStream.nullOutputStream ()
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!
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:" ) ) );
ByteArrayOutputStream
è quello che vuoi (supponendo che l'API invierà testo). Basta istanziarne uno nuovo.