Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串作为输入传送到Java Runtime.exec()中_Java_Runtime.exec - Fatal编程技术网

将字符串作为输入传送到Java Runtime.exec()中

将字符串作为输入传送到Java Runtime.exec()中,java,runtime.exec,Java,Runtime.exec,我有一个字符串,我需要将其导入外部程序,然后将输出读回。我知道如何读回输出,但如何将此字符串作为输入?谢谢 它是这样的(未编译且未测试) 它是这样的(未编译和未测试) 小心不要造成死锁。如果进程正在写入您未读取的数据,而您正在写入它未读取的数据,则在同一线程中读取/写入进程可能会出现问题 我倾向于使用一个小的模式线来让io在不同的线程中运行: import java.io.InputStream; import java.io.OutputStream; public final class

我有一个字符串,我需要将其导入外部程序,然后将输出读回。我知道如何读回输出,但如何将此字符串作为输入?谢谢

它是这样的(未编译且未测试)

它是这样的(未编译和未测试)


小心不要造成死锁。如果进程正在写入您未读取的数据,而您正在写入它未读取的数据,则在同一线程中读取/写入进程可能会出现问题

我倾向于使用一个小的模式线来让io在不同的线程中运行:

import java.io.InputStream;
import java.io.OutputStream;

public final class Pipe implements Runnable {

    private final InputStream in;
    private final OutputStream out;

    public Pipe(InputStream in, OutputStream out) {
        this.in = in;
        this.out = out;
    }

    public static void pipe(Process process) {
        pipe(process.getInputStream(), System.out);
        pipe(process.getErrorStream(), System.err);
        pipe(System.in, process.getOutputStream());
    }

    public static void pipe(InputStream in, OutputStream out) {
        final Thread thread = new Thread(new Pipe(in, out));
        thread.setDaemon(true);
        thread.start();
    }

    public void run() {
        try {
            int i = -1;

            byte[] buf = new byte[1024];

            while ((i = in.read(buf)) != -1) {
                out.write(buf, 0, i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
这可能适用于您想要做的事情,也可能不适用于您想要做的事情——可能您正在处理一组已建立的输入,这些输入保证在某些预期输出之后出现(反之亦然,或者多次迭代)。即一些同步块和步进式交互


但如果你只是在“观察”可能出现的东西,那么这是朝着正确方向的良好开端。您将传入一些不同的流,并使用一些java.util.concurrent“wait(long,TimeUnit)”类型的代码来等待响应。Java IO基本上永远在read()操作上阻塞,因此如果无法从外部进程获得预期的响应,将自己与这些线程分离将允许您在一段时间后放弃。

小心不要造成死锁。如果进程正在写入您未读取的数据,而您正在写入它未读取的数据,则在同一线程中读取/写入进程可能会出现问题

我倾向于使用一个小的模式线来让io在不同的线程中运行:

import java.io.InputStream;
import java.io.OutputStream;

public final class Pipe implements Runnable {

    private final InputStream in;
    private final OutputStream out;

    public Pipe(InputStream in, OutputStream out) {
        this.in = in;
        this.out = out;
    }

    public static void pipe(Process process) {
        pipe(process.getInputStream(), System.out);
        pipe(process.getErrorStream(), System.err);
        pipe(System.in, process.getOutputStream());
    }

    public static void pipe(InputStream in, OutputStream out) {
        final Thread thread = new Thread(new Pipe(in, out));
        thread.setDaemon(true);
        thread.start();
    }

    public void run() {
        try {
            int i = -1;

            byte[] buf = new byte[1024];

            while ((i = in.read(buf)) != -1) {
                out.write(buf, 0, i);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
这可能适用于您想要做的事情,也可能不适用于您想要做的事情——可能您正在处理一组已建立的输入,这些输入保证在某些预期输出之后出现(反之亦然,或者多次迭代)。即一些同步块和步进式交互

但如果你只是在“观察”可能出现的东西,那么这是朝着正确方向的良好开端。您将传入一些不同的流,并使用一些java.util.concurrent“wait(long,TimeUnit)”类型的代码来等待响应。Java IO基本上永远阻塞在read()操作上,因此如果无法从外部进程获得预期的响应,将自己与这些线程分离将允许您在一段时间后放弃