我在php中使用proc_open来调用java应用程序,向它发送一个大文本进行处理并捕获返回的结果。是否可以传递多个文本字符串(输入流)而不只是一个?
这就是我现在所得到的:
fwrite($pipes[0], $input);
fclose($pipes[0]);
$output = stream_get_contents($pipes[1]);
fclose($pipes[1]);
如果我这样做,java仍会将其识别为一个输入流:
fwrite($pipes[0], $input);
fwrite($pipes[0], $input1);
fwrite($pipes[0], $input2);
fclose($pipes[0]);
$output = stream_get_contents($pipes[1]);
fclose($pipes[1]);
这样的事情可能吗?如果没有,任何替代方案?我无法使用命令行参数,因为它是一个包含多行的大文本。
答案 0 :(得分:0)
不,一个进程只有一个标准输入流,一个标准输出流和一个标准错误(输出)流(对于每个进程都是如此,不仅仅是java或php)。
编辑:
答案 1 :(得分:0)
这取决于您尝试做什么,以及Java应用程序所期望的内容。
如果您希望Java应用程序看到$input
,$input2
和$input3
的串联,那么确定......您的代码将会这样做。
如果您希望Java能够自动将这些输入看作不同的流,那么没有。就Java IO系统而言,字节只是字节。除了(组合)流的最终结束之外,没有自然界限。
如果您希望Java看到一个流然后可以拆分为三个流,那么它是可能的,但这需要一些编程工作。
在PHP方面,您必须向流中添加某种“框架”信息,告知Java端一个“流”结束并且下一个流开始。
在Java方面,您必须查找/解释该框架信息。
可以通过为每个流发送字节数后跟字节来完成成帧,或者可以使用标记字符或指定流结束的序列来完成成帧。