1

我有一个程序 A 通过 Pipe.SourceChannel 在 ByteBuffer 中接收另一个程序 B 的标准输出。

程序将从 ByteBuffer 读取 stdout 直到它到达流的末尾(即,直到 ByteBuffer 的 read() 返回 -1)。

程序B的stdout可以在程序执行中多次打开和关闭吗?也就是说,read() 是否有可能返回 -1,但后来程序 B 有额外的 stdout,在这种情况下,程序 A 应该对 ByteBuffer 进行另一次 read()?

提前致谢。

4

2 回答 2

3

在 Linux 下,您可以将 NIO 用于 stdin、stdout 和 stderr,因为它们与某些字符设备相关联,可以作为文件访问。为此,您可以/proc/self/fd/0分别打开12。这不适用于所有流类型或非 Unix 系统,但它可能是一种选择。

一旦流关闭,就无法重新打开它,除非它是一个文件并且您能够获得文件名。

于 2012-08-18T07:53:23.783 回答
0

不,这是不可能的。stdout、stderr 和 stdin 都是“特殊”流。您无法关闭它们并稍后重新打开它们。

于 2012-08-18T00:06:29.793 回答