126

我需要为OutputStream我正在使用的 API 指定一个,但我实际上并不需要输出。Java是否有OutputStream等价于> /dev/null

4

9 回答 9

118
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}
于 2009-03-28T10:38:45.790 回答
70

Java 看起来不是,但 Apache Commons IO 是。看看以下内容:

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

希望有帮助。

于 2009-03-27T23:36:19.673 回答
46

还没有提到,所以我还要添加GuavaByteStreamsnullOutputStream(),因为有些人可能更喜欢 Guava 而不是 Apache Commons IO 或者已经在他们的项目中拥有它。

注意:如果您使用旧版本的 Guava(从 1.0 到 13.0),则需要使用com.google.io.NullOutputStream

于 2012-05-22T18:45:10.487 回答
44

从 Java 11 开始,有一个静态实用程序可以完全满足您的需要,即静态工厂方法OutputStream.nullOutputStream()

返回一个丢弃所有字节的新 OutputStream。返回的流最初是打开的。通过调用 close() 方法关闭流。对 close() 的后续调用无效。

于 2018-10-04T00:12:58.207 回答
15

重新散列已经提供的答案-

Java 没有NullOutputStream类。但是,您可以自己滚动OutputStream忽略写入它的任何数据 - 换句话说write(int b)write(byte[] b)并且write(byte[] b, int off, int len)将具有空的方法体。这就是 Common IONullOutputStream类所做的。

于 2009-03-27T23:51:41.023 回答
4

Java 11 添加了OutputStream.nullOutputStream()

于 2019-12-27T12:38:50.260 回答
3

不,但它很容易实现。

请参阅此问题“如何从代码库中删除 System.out.println”

然后你只需要:

System.setOut( DevNull.out );

或类似的东西 :)

System.setOut(打印流)

于 2009-03-27T23:45:36.000 回答
2

镇上来了一个新男孩,他像个魅力一样照顾这个,只需几行代码就可以了。它的JDK 11nullWriter()已经在那里引入,可以解决这个问题。这是处理相同旧问题的代码,新方法无需担心操作系统(OS)。

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

希望这可以帮助某人!

于 2018-11-25T19:30:53.000 回答
0

我相信这就是您要寻找的东西,我也在寻找同样的东西:这是用于从标准错误重定向输出流,在 ProcessBuilder 对象中标准输出。

块引用

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • 多姆
于 2014-09-10T17:45:39.663 回答