我编写了一个小型 Java 函数,它调用另一个 Java 程序并显示其输入。
private static void call() throws Exception
{
int line;
///Other stuff here
Process p2= Runtime.getRuntime().exec("java SelfModifying");
InputStream is = p2.getInputStream();
//p.waitFor();
while ((line = is.read()) != -1) {
System.out.println("result: " + line);
}
Runtime.getRuntime().exit(0);
}
调用的程序应该返回一个 int 值:'10'。
相反,我得到 4 行:
结果:49
结果:48
结果:13
结果:10
其他三个值从哪里来?它们是确定性的,但似乎来自输入。当我单独运行该程序时,它不会返回这 3 行。
最佳答案
您正在从流中读取单个字节:
- 49 是 ASCII
'1'
; - 48 是 ASCII
'0'
; - 13 是 ASCII
'\r'
; - 10 是 ASCII
'\n'
。
因此文件的内容为 10\r\n
(10,后跟 Windows 换行符)。
您应该将 is
包装在扫描仪中:
Scanner scanner = new Scanner(is, "UTF-8");
System.out.println(scanner.nextInt());
关于Java:输入流中的垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945637/