java nio和stdin,stdout,stderr的流结束

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

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

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

提前致谢。

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

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

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