我有一个程序A,它通过Pipe.SourceChannel接收ByteBuffer中另一个程序B的stdout。
程序将从ByteBuffer中读取stdout,直到它到达流的末尾(即,直到ByteBuffer的read()返回-1)。
程序B的stdout可以在程序执行中多次打开和关闭吗?也就是说,read()是否可能返回-1,但后来程序B有额外的stdout,在这种情况下,程序A应该执行另一个ByteBuffer的read()?
提前致谢。
答案 0 :(得分:3)
在Linux下,您可以将NIO用于stdin,stdout和stderr,因为它们与某些字符设备绑定,可以作为文件进行访问。为此,您可以分别打开/proc/self/fd/0
,1
或2
。这不适用于所有流类型,也不适用于非Unix系统,但它可能是一种选择。
一旦关闭了流,就无法重新打开它,除非它是一个文件并且你能够获得文件名。
答案 1 :(得分:0)
不,这是不可能的。 stdout,stderr和stdin都是“特殊”流。你无法关闭它们并在以后重新打开它们。