用Java实现管道

用Java实现管道,java,Java,需要关于如何在Java中实现管道的建议。例如 echo "test"|wc 我需要显示上述管道示例的结果 我试过这个: public class myRunner { private static final String[] cmd = new String[] {"wc"}; public static void main(String[] args){ try { ProcessBuilder pb = new ProcessBuilder

需要关于如何在Java中实现管道的建议。例如

echo "test"|wc
我需要显示上述管道示例的结果

我试过这个:

public class myRunner {

  private static final String[] cmd = new String[] {"wc"};
  public static void main(String[] args){       
    try {
        ProcessBuilder pb = new ProcessBuilder( cmd );
        pb.redirectErrorStream(true);           
        Process process = pb.start();
        OutputStream os = process.getOutputStream();
        os.write("echo test".getBytes() );
        os.close();
    }catch (IOException e){
        e.printStackTrace();
    }
如何查看
wc
output的输出

我相信我可以使用的另一个库是
PipedInputStream
/
PipedOutputStream
。有人能举例说明如何使用它吗?我很困惑。谢谢

如何查看wc输出的输出

通过
进程的
输出,通过
进程.getInputStream()
,并从中读取。

公共数组列表执行器管道(String[]cmd,String outputOld){
public ArrayList<String> executorPiped(String[] cmd, String outputOld){
    String s=null;
    ArrayList<String> out=new ArrayList<String>();

    try {
        ProcessBuilder pb = new ProcessBuilder( cmd );
        pb.redirectErrorStream(true);
        Process p = pb.start();
        OutputStream os = p.getOutputStream();
        os.write(outputOld.getBytes());
        os.close();

        BufferedReader stdInput = new BufferedReader(new
                InputStreamReader(p.getInputStream()));

        BufferedReader stdError = new BufferedReader(new
                InputStreamReader(p.getErrorStream()));

        while ((s = stdInput.readLine()) != null) {
            out.add(s);
        }
    }catch (IOException io){

    }
    return out;
}
字符串s=null; ArrayList out=新的ArrayList(); 试一试{ ProcessBuilder pb=新的ProcessBuilder(cmd); pb.重定向错误流(真); 进程p=pb.start(); OutputStream os=p.getOutputStream(); write(outputOld.getBytes()); os.close(); BufferedReader标准输入=新BufferedReader(新 InputStreamReader(p.getInputStream()); BufferedReader stdError=新的BufferedReader(新的 InputStreamReader(p.getErrorStream()); 而((s=stdInput.readLine())!=null){ out.添加(s); } }捕获(io异常){ } 返回; }
您能发布您尝试过的内容、您期望它做什么以及它能做什么吗?请参阅检查此帖子以了解PipedInputSteam的清晰度[
PipedInput/OutputStreams
与此问题无关。它们用于线程之间的通信,而不是进程之间的通信,在线程之间使用某种队列几乎总是更好,正如我在回答@SureshKoya引用的线程时所述。