Java BufferedWriter.write

时间:2017-07-19 23:42:40

标签: java pipe stdin bufferedwriter

我想将一些输入字符串设置为stdin,以便另一个进程可以读取stdin作为输入。我使用了Java BufferedWriter。但是,如果输入字符串大于管道大小或其他进程未读取,我该如何处理?是否有API来检查管道是否可用于写入?

BufferedWriter stdin = new BufferedWriter(new OutputStreamWriter(p1.getOutputStream()));

stdin.write(inputToP2);

stdin.flush();

1 个答案:

答案 0 :(得分:1)

  

但是当输入字符串大于管道大小

时,如何处理这种情况

你不必。它会阻塞,直到空间可用。

  

或其他过程无法阅读?

同样,您将阻止直到空间可用。如果其他流程无法读取,那么这是其他流程中的错误。

  

是否有API来检查管道是否可用于写入?

没有。这是Java阻塞I / O.它阻止。 Java没有提供任何其他方式来写入进程的输入,或查看阻塞写入是否会阻塞。

  

我收到了代码审核反馈,如果没有人正在阅读,则会阻止写入

这是正确的,但他们希望你怎么做呢?它阻止I / O,它是如何工作的。问他们他们希望你做些什么。

NB stdin是输入的名称,而不是输出。不要使用输入流的输入名称。它是对其他进程的输入,但它会输出到您的进程。我也不会称它stdout,它不是你的stdout。我实际上只是称它为out,或者如果需要更多特异性,则称为processOut