Existe-t-il un OutputStream Null en Java?


112

Je dois spécifier un OutputStreampour une API que j'utilise, mais je n'ai pas vraiment besoin de la sortie. Java a-t-il un OutputStreaméquivalent à > /dev/null?

Réponses:


19

Depuis Java 11, il existe un utilitaire statique qui fait exactement ce dont vous avez besoin, une méthode de fabrique statique OutputStream.nullOutputStream():

Renvoie un nouveau OutputStream qui supprime tous les octets. Le flux renvoyé est initialement ouvert. Le flux est fermé en appelant la méthode close (). Les appels ultérieurs à close () n'ont aucun effet.


Génial, merci de l'avoir signalé! Mais "depuis Java 11"? Je pense que Java 11 n'est sorti que depuis une semaine.
Brandon Yarbrough

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

15
Cela peut également être facilement implémenté partout où vous en avez besoin en utilisant quelque chose comme ceci: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz




3

Pas dans la bibliothèque standard AFAIK, mais il ne devrait pas être difficile d'en créer une en remplaçant l'écriture dans OutputStream


Pourquoi cela a-t-il été rejeté? Il est en effet trivial de mettre en œuvre cette solution, comme l'a montré McDowell plus haut.
pdxleif



1

Il y a un nouveau garçon dans la ville, qui s'occupe de ça comme un charme, juste quelques lignes de code devraient fonctionner. Son JDK 11 et nullWriter () y ont été introduits, qui s'en charge. Voici le code pour traiter le même vieux problème, une nouvelle façon sans se soucier du système d'exploitation (OS).

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

J'espère que cela peut aider quelqu'un!


0

Je pense que c'est ce que vous recherchez, je recherchais la même chose: il s'agit de rediriger les flux de sortie à partir d'une erreur standard, standard dans les objets ProcessBuilder.

Blockquote

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

Ceci est spécifique à Windows.
peterh

-4

ByteArrayOutputStreamest ce que vous voulez (en supposant que l'API produira du texte). Juste instancier un nouveau.


2
C'est une mauvaise idée car vous accumulerez des données en mémoire au lieu de les jeter. Que faire si l'écrivain écrit 15 Go de courrier indésirable sur votre BAOS? Ça pourrait arriver.
traitez bien vos mods
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.