web-dev-qa-db-fra.com

Existe-t-il un Null OutputStream en Java?

Je dois spécifier OutputStream pour une API que j'utilise, mais je n'ai pas réellement besoin de la sortie. Est-ce que Java a une OutputStream équivalente à > /dev/null?

97
Brandon Yarbrough

Java ne semble pas, mais Apache Commons IO le fait. Jetez un oeil à ce qui suit:

https://commons.Apache.org/proper/commons-io/javadocs/api-2.5/org/Apache/commons/io/output/NullOutputStream.html

J'espère que cela pourra aider.

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

Ce n'est pas encore mentionné, donc j'ajouterai aussi Guava 's ByteStreams . nullOutputStream (), car certains pourraient préférer Guava à Apache Commons IO ou l'ont déjà dans leur projet.

Remarque: Si vous utilisez une version antérieure de Guava (versions 1.0 à 13.0), vous souhaitez utiliser com.google.io.NullOutputStream .

38
haylem

Rehausser les réponses déjà fournies -

Java n'a pas de classe NullOutputStream. Vous pouvez toutefois lancer votre propre variable OutputStream qui ignore toutes les données qui y sont écrites. En d'autres termes, write(int b), write(byte[] b) et write(byte[] b, int off, int len) auront des corps de méthode vides. C’est ce que fait la classe IO NullOutputStream commune.

14
Vineet Reynolds

Depuis Java 11, il existe un utilitaire statique qui répond exactement à vos besoins: une méthode de fabrique statique OutputStream.nullOuputStream() :

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.

3
leventov

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

3
Uri

Non, mais c'est assez facile à mettre en œuvre.

Voir cette question "Comment supprimer System.out.println de Codebase"

Et puis il vous suffit de:

System.setOut( DevNull.out );

Ou quelque chose comme ça :)

System.setOut (PrintStream)

3
OscarRyz

Je pense que c’est ce que vous recherchiez. Je recherchais la même chose: Il s’agit de rediriger les flux de sortie d’une erreur standard, sortie standard dans les objets ProcessBuilder.

Blockquote

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