我想将一些输入字符串设置为stdin,以便另一个进程可以读取stdin作为输入。我使用了Java BufferedWriter
。但是,如果输入字符串大于管道大小或其他进程未读取,我该如何处理?是否有API来检查管道是否可用于写入?
BufferedWriter stdin = new BufferedWriter(new OutputStreamWriter(p1.getOutputStream()));
stdin.write(inputToP2);
stdin.flush();
答案 0 :(得分:1)
但是当输入字符串大于管道大小
时,如何处理这种情况
你不必。它会阻塞,直到空间可用。
或其他过程无法阅读?
同样,您将阻止直到空间可用。如果其他流程无法读取,那么这是其他流程中的错误。
是否有API来检查管道是否可用于写入?
没有。这是Java阻塞I / O.它阻止。 Java没有提供任何其他方式来写入进程的输入,或查看阻塞写入是否会阻塞。
我收到了代码审核反馈,如果没有人正在阅读,则会阻止写入
这是正确的,但他们希望你怎么做呢?它阻止I / O,它是如何工作的。问他们他们希望你做些什么。
NB stdin
是输入的名称,而不是输出。不要使用输入流的输入名称。它是对其他进程的输入,但它会输出到您的进程。我也不会称它stdout
,它不是你的stdout
。我实际上只是称它为out
,或者如果需要更多特异性,则称为processOut
。