Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个程序 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/0分别打开1或2。这不适用于所有流类型或非 Unix 系统,但它可能是一种选择。
/proc/self/fd/0
1
2
一旦流关闭,就无法重新打开它,除非它是一个文件并且您能够获得文件名。
不,这是不可能的。stdout、stderr 和 stdin 都是“特殊”流。您无法关闭它们并稍后重新打开它们。