2015-08-21 2 views
-1

Если proc вышел, где хранятся выходные строки?Предоставляет ли java.io.Process выход для вывода, даже если подпроцесс вышел?

Внутренний буфер?

Как если внутренний буфер слишком мал, чтобы содержать огромные строки?

Можем ли мы гарантировать получение строк без потерь?

package Hello; 

import java.io.*; 

public class Hello { 

    public static void main(String args[]) { 

     String line = null; 

     try { 
      ProcessBuilder pb = new 
       ProcessBuilder("command_to_output_huge_strings"); 

      Process proc = pb.start(); 
      proc.waitFor(); 
      // 
      // Now proc may have finished its huge output and exited. 
      // 

      // Now we want to get the huge strings proc outputed. 
      BufferedReader stdInput = new BufferedReader(
        new InputStreamReader(proc.getInputStream())); 
      while ((line = stdInput.readLine()) != null) { 
       System.out.println(line); 
      } 

     } catch (Exception e) { 
     } 
    } 
} 
+0

Что вы подразумеваете под lossless ?? – ganeshvjy

+0

Я имею в виду, что процесс Java может получить весь вывод своего подпроцесса, даже если подпроцесс вышел. – xmllmx

+1

** Не вставляйте свой вопрос в код. Поместите это в текст, где каждый может это увидеть. – EJP

ответ

1
  1. Там нет Буферизации в Process.getInputStream().
  2. Там может быть буферизация в самом процессе.
  3. Процесс не может выйти, пока он не сбросил свои буферы.
  4. Вы вызываете Process.waitFor(), а затем пытаетесь прочитать его вывод.
  5. Ваш вопрос поэтому не имеет смысла, и ваш код возвращается к передней. Вы должны прочитать весь выход процесса и , а затем позвонить по телефону waitFor().
Смежные вопросы