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?

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.


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

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




3

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


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!


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

Dies ist Windows-spezifisch.
Peterh

-4

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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.