Gibt es einen Null OutputStream in Java?

111

Ich muss eine OutputStreamfür eine API angeben, die ich verwende, aber ich brauche die Ausgabe nicht wirklich. Hat Java ein OutputStreamÄquivalent zu > /dev/null?

Brandon Yarbrough
quelle

Antworten:

18

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.

leventov
quelle
Super, danke, dass du darauf hingewiesen hast! Aber "seit Java 11"? Ich denke, Java 11 ist erst seit einer Woche verfügbar.
Brandon Yarbrough
115
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}
McDowell
quelle
15
Dies kann auch einfach implementiert werden, wo immer Sie es brauchen, mit so etwas: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz
15

Aufwärmen der bereits gegebenen Antworten -

Java hat keine NullOutputStreamKlasse. 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- NullOutputStreamKlasse tut.

Vineet Reynolds
quelle
3

Nicht in der Standardbibliothek AFAIK, aber es sollte nicht schwierig sein, eine zu erstellen, indem das Schreiben in OutputStream überschrieben wird

Uri
quelle
Warum wurde dies abgelehnt? Es ist in der Tat trivial, diese Lösung zu implementieren, wie McDowell oben gezeigt hat.
pdxleif
1

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!

Roter Junge
quelle
0

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:" ) ) );
  • Dom
Dominik
quelle
Dies ist Windows-spezifisch.
Peterh
-4

ByteArrayOutputStreamist das, was Sie wollen (vorausgesetzt, die API gibt Text aus). Instanziieren Sie einfach eine neue.

Gostone
quelle
2
Dies ist eine schlechte Idee, da Sie Daten im Speicher sammeln, anstatt sie wegzuwerfen. Was ist, wenn der Autor 15 GB Junk in Ihr BAOS schreibt? Es könnte passieren.
Behandle deine Mods gut