web-dev-qa-db-ja.com

JavaにはNull OutputStreamがありますか?

使用しているAPIにOutputStreamを指定する必要がありますが、実際には出力の必要はありません。 Javaには> /dev/nullと同等のOutputStreamがありますか?]

101

Javaはそう思わないかもしれませんが、Apache Commons IOはそうです。以下を見てください。

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

お役に立てば幸いです。

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

まだ言及されていないので、Guava 's ByteStreams . nullOutputStream()、一部の人はApache CommonsよりもGuavaを好むかもしれませんIOまたは既にプロジェクトに持っています。

注:古いバージョンのGuava(1.0から13.0)を使用する場合は、 com.google.io.NullOutputStreamを使用します

39
haylem

すでに提供されている答えを再ハッシュする-

JavaにはNullOutputStreamクラスがありません。ただし、書き込まれたデータを無視する独自のOutputStreamをロールできます。つまり、write(int b)write(byte[] b)、およびwrite(byte[] b, int off, int len)には空のメソッドがあります体。これは、Common IO NullOutputStreamクラスが行うことです。

14
Vineet Reynolds

Java 11)なので、まさに必要なことを行う静的ユーティリティ、静的ファクトリーメソッド OutputStream.nullOuputStream()

すべてのバイトを破棄する新しいOutputStreamを返します。返されるストリームは最初は開いています。 close()メソッドを呼び出すと、ストリームが閉じられます。その後のclose()の呼び出しは効果がありません。

8
leventov

標準ライブラリAFAIKにはありませんが、OutputStreamで書き込みをオーバーライドして作成することは難しくありません。

3
Uri

いいえ。ただし、実装は非常に簡単です。

この質問を参照してください "コードベースからSystem.out.printlnを削除する方法"

そして、あなたはただする必要があります:

System.setOut( DevNull.out );

またはそのようなもの:)

System.setOut(PrintStream)

3
OscarRyz

町には新しい男の子がいます。これは魅力のように世話をします。ほんの数行のコードで動作するはずです。そのJDK 11および nullWriter() が導入されており、これはこれを処理します。オペレーティングシステム(OS)を気にせずに、同じ古い問題、新しい方法に対処するコードを示します。

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

これが誰かを助けることを願っています!

1
Red Boy

私はこれがあなたが探しているものだと信じています、私は同じものを探していました:これは標準エラーからの出力ストリームをリダイレクトするためのもので、ProcessBuilderオブジェクトの標準出力です。

ブロッククォート

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