2016-03-11 93 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