Java:输入流中的垃圾

Java: trash in input Stream

我编写了一个小的 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);
}

gests 调用的程序应该return 一个单一的 int 值:'10'。
相反,我得到 4 行: 结果:49 结果:48 结果:13 结果:10

其他三个值从何而来?它们是确定性的,但似乎来自输入。当我 运行 程序本身时,它不会 return 这 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());