Ich muss eine OutputStream
für eine API angeben, die ich verwende, aber ich brauche die Ausgabe nicht wirklich. Hat Java ein OutputStream
Äquivalent zu > /dev/null
?
Ich muss eine OutputStream
für eine API angeben, die ich verwende, aber ich brauche die Ausgabe nicht wirklich. Hat Java ein OutputStream
Äquivalent zu > /dev/null
?
Antworten:
Seit Java 11 gibt es ein statisches Dienstprogramm, das genau das tut, was Sie benötigen, eine statische Factory-Methode OutputStream.nullOutputStream()
:
Gibt einen neuen OutputStream zurück, der alle Bytes verwirft. Der zurückgegebene Stream ist zunächst geöffnet. Der Stream wird durch Aufrufen der Methode close () geschlossen. Nachfolgende Aufrufe von close () haben keine Auswirkung.
/**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 scheint es nicht zu sein, Apache Commons IO jedoch. Schauen Sie sich Folgendes an:
Hoffentlich hilft das.
Es ist noch nicht erwähnt, also werde ich auch hinzufügen Guava ‚s Bytestreams . nullOutputStream () , da einige Guava Apache Commons IO vorziehen oder es bereits in ihrem Projekt haben.
Hinweis: Wenn Sie eine ältere Version von Guava (von 1.0 bis 13.0) verwenden, möchten Sie com.google.io.NullOutputStream verwenden .
Aufwärmen der bereits gegebenen Antworten -
Java hat keine NullOutputStream
Klasse. Sie können jedoch Ihre eigenen rollen OutputStream
, die alle darauf geschriebenen Daten ignorieren - mit anderen Worten write(int b)
, write(byte[] b)
und write(byte[] b, int off, int len)
leere Methodenkörper haben. Dies ist, was die Common IO- NullOutputStream
Klasse tut.
Nein, aber es ist ziemlich einfach zu implementieren.
Siehe diese Frage "So entfernen Sie System.out.println aus der Codebasis"
Und dann müssen Sie nur noch:
System.setOut( DevNull.out );
Oder etwas ähnliches :)
Java 11 hat OutputStream.nullOutputStream () hinzugefügt
Es gibt einen neuen Jungen in der Stadt, der sich wie ein Zauber darum kümmert, nur wenige Codezeilen sollten funktionieren. Dort wurden JDK 11 und nullWriter () eingeführt, die sich darum kümmern. Hier ist der Code, um das gleiche alte Problem auf neue Weise zu lösen, ohne sich um das Betriebssystem zu kümmern.
String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();
Hoffe das kann jemandem helfen!
Ich glaube, dass dies das ist, wonach Sie suchen. Ich habe das Gleiche gesucht: Dies dient zum Umleiten von Ausgabestreams von Standardfehlern, die in ProcessBuilder-Objekten standardmäßig ausgegeben werden.
Blockquote
pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
ByteArrayOutputStream
ist das, was Sie wollen (vorausgesetzt, die API gibt Text aus). Instanziieren Sie einfach eine neue.