Java中是否有Null OutputStream?


111

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

Answers:


18

从Java 11开始,有一个静态工具可以完全满足您的需要,它是一个静态工厂方法OutputStream.nullOutputStream()

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


太棒了,感谢您指出!但是“自Java 11起”?我认为Java 11仅仅发布了一周。
布兰登·雅伯

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

15
只要您需要,也可以使用以下类似的方法轻松实现: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz




3

不在标准库AFAIK中,但是通过覆盖OutputStream中的write来创建它并不难


为什么会对此表示不满?如上面的McDowell所示,实现此解决方案确实微不足道。
pdxleif 2012年



1

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

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

希望这可以帮助某人!


0

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

块引用

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

这是Windows特有的。
peterh

-4

ByteArrayOutputStream就是您想要的(假设API将输出文本)。只需实例化一个新的。


2
这是一个坏主意,因为您将在内存中累积数据而不是将其丢弃。如果作者将15 GB的垃圾写入您的BAOS怎么办?可能会发生。
好好对待您的mods 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.