我有一个字符串,我需要将其传入外部程序,然后再读取输出。我知道如何读取输出,但是如何将此字符串作为输入来管理?谢谢!将字符串配成Java Runtime.exec()作为输入
1
A
回答
2
小心,你不创建一个僵局。如果进程正在写入数据,而您正在读取的数据还没有读取,并且正在写入它未读取的数据,则读取/写入同一线程中的进程可能会产生问题。
我倾向于使用一个小图案线这让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'await(long,TimeUnit)'类型代码中等待响应。 Java IO基本上永远在read()操作中阻塞,所以如果你没有从外部进程得到预期的响应,那么将自己从这些线程中分离出来可以让你在一段时间后放弃。
2
它是这样的(未编译和未经测试)
Process p = Runtime . getRuntime () . exec (...) ;
Writer w = new java . io . OutputStreamWriter (p . getOutputStream ()) ;
w . append (yourString) ;
w. flush () ;
// read the input back
相关问题
- 1. Java将字符串附加键输入
- 2. 如何发送java字符串作为输入从java到gnuplot?
- 3. Java - 为输入字符的字符串分配一个数字和一个字
- 4. Java:如何为字符串输入获取分配的数值
- 5. 字符串作为输入变量 - R
- 6. Java:将Gzip字符串转换为输出字符串
- 7. 为什么我会将“null”作为输出字符串? Java
- 8. 如何在inputdlg中将字符串输入为字符串?
- 9. 将输入字符串分块成每行字符数java编程
- 10. 如何将字符串输入处理为'None'作为Nonetype
- 11. 为什么jQuery $()将输入作为字符串?
- 12. 将字符串写入文件作为Java中的字节
- 13. 将字符串转换为java中的XML输入流
- 14. JAVA:将用户输入保存为Jframe GUI中的字符串
- 15. 将用户输入字符串转换为大写Java
- 16. 如何接收字符串作为输入,并将int作为输出
- 17. 如何将多个字符串值作为输入?
- 18. VTD-XML可以将字符串作为输入吗?
- 19. 基本Python:将字符串作为输入传递给函数
- 20. Java - 将字符串转换为字符[]
- 21. 在java中将字符串分割成多个子字符串
- 22. PostgreSQL匹配字符串动态输入字符串
- 23. 为什么Java正则表达式“|”为任何输入字符串找到匹配的子字符串?
- 24. 将字符串作为输入并计算字符串出现在字符串中的次数的函数
- 25. 将输入的字符串匹配到一个随机字符串
- 26. textField输入字符串转换成UINT32
- 27. Java输入不识别字符串
- 28. Java:键盘类输入字符串
- 29. NumberFormatException:对于输入字符串:“[memorylocation”java
- 30. 的Java检查字符串输入