【发布时间】:2018-11-23 14:52:29
【问题描述】:
使用 Java 11,我可以将 InputStream 初始化为:
InputStream inputStream = InputStream.nullInputStream();
但我无法理解 InputStream.nullInputStream 的潜在用例或 OutputStream 的类似 API
即OutputStream.nullOutputStream。
从 API Javadocs,我可以弄清楚它
返回一个新的
InputStream,不读取任何字节。返回的流是 最初打开。通过调用 close() 方法关闭流。对
close()的后续调用无效。当溪流打开时,available(),read(),read(byte[]), ...skip(long)和transferTo()方法都表现得好像流结束了 已到达。
我进一步查看了detailed release notes,其中指出:
有很多时候我想使用需要的方法 作为参数,用于发送输出的目标 OutputStream/Writer,但是 想要静默执行这些方法以获得其他效果。
这对应于 Unix 中将命令输出重定向到 /dev/null,或在 DOS 中将命令输出附加到 NUL。
但我无法理解语句中的 那些方法 是什么,如 .... 静默执行这些方法以获得其他效果。 (怪我缺乏对 API 的实际操作)
如果可能的话,有人可以通过示例帮助我了解拥有这样一个输入或输出流的用处吗?
编辑:我在进一步浏览时可以找到的类似实现之一是 apache-commons'NullInputStream,它确实更好地证明了测试用例的合理性。
【问题讨论】:
-
在提出问题时,有时我收到了this question 作为建议查看。那里的链接都没有到达正确的站点,我也没有使用 JDK 工作的经验,可以找到代码行。也许我错过了一些东西,因此在这里链接它。
-
如何将一个流传递给一个不存在的文件到一个可选的方法。你将如何告诉一个丢弃数据的方法 - 即你如何做
> /dev/null。还有 - 测试! -
这是null object pattern 的实现。如果您了解模式的含义,您将了解空流的用途。
-
@BoristheSpider 从理论上讲,虽然愿意从流中丢弃数据,但我确实有点理解这意味着什么,但是为什么要这样做(丢弃数据)?是否有任何服务/系统我应该知道知道这样的实现? 测试 - 是的,为此做出贡献也很有意义。
-
@plalx 感谢您的链接。我可以将其与详细的发行说明中关于兼容性问题的讨论相关联,同时进行更改以为 i/o 流创建空安全实现。会进一步阅读并更明智地消化它。再次感谢。
标签: java inputstream apache-commons outputstream java-11