2016-03-11 66 views
0

我运行一个小的Java函数,调用另一个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调用的prorgam应该返回一个int值:'10'。
相反,我得到4线: 结果:49 结果:48 结果:13 结果:10

在哪里其他三个值从何而来?它们是确定性的,但似乎来自于输入。当我自己运行程序时,它不返回这3行。

+1

何必呢?为什么不启动一个类加载器,加载另一个主类并通过反射直接调用'main'?附:盲目地将读取的结果从“InputStream”(单个字节)转换为“String”并不会产生任何有用的结果。您需要使用具有正确编码集的“InputStreamReader”。 –

+1

您正在读取流中的单个字节:49是ASCII''1''; 48是ASCII''0'; 13是ASCII''\ r''; 10是ASCII''\ n''。 –

回答

2

你从流中读取单个字节:

  • 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()); 
+0

非常感谢Andy! – Rafa