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

时间:2012-08-17 23:56:07

标签: java nio

我有一个程序A,它通过Pipe.SourceChannel接收ByteBuffer中另一个程序B的stdout。

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

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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