Im folgenden Code verwendet der Autor Runtime
, um einen Unterprozess aufzurufen. Aber ich verstehe nicht, warum er StreamGobbler
verwendet. Was passiert, wenn es durch InputStream
ersetzt wird? Bitte hilf mir, danke!Was ist der Unterschied zwischen InputStream und StreamGobbler?
public class GoodWindowsExec
{
public static void main(String args[])
{
try
{
String osName = System.getProperty("os.name");
System.out.println("osName: " + osName);
String[] cmd = new String[3];
if(osName.equals("Windows XP") ||osName.equals("Windows 2000"))
{
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
}
else if(osName.equals("Windows 98"))
{
cmd[0] = "command.com" ;
cmd[1] = "/C" ;
cmd[2] = args[0];
}
Runtime rt = Runtime.getRuntime();
System.out.println("Execing " + cmd[0] + " " + cmd[1]+ " " + cmd[2]);
Process proc = rt.exec(cmd);
// any error message?
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR"); //Can I replace StreamGobbler by InputStream?
// any output?
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT"); //As above
// kick them off
errorGobbler.start();
outputGobbler.start();
// any error???
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
} catch (Throwable t){
t.printStackTrace();
}
}
}
BufferedReader brNormal = new BufferedReader(new InputStreamReader(process.getInputStream()));
String s = null;
while ((s = brNormal.readLine()) != null) {
logger.info("RawToRgbConverter.exe", s);
}
brNormal.close();
BufferedReader brError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while ((s = brError.readLine()) != null) {
logger.error("RawToRgbConverter.exe", s);
}
brError.close();
Aus welcher 3rd-Party-Bibliothek kommt 'StreamGobbler'? Aus dem Code scheint es, dass es einen Thread enthält, der den Stream liest, wahrscheinlich in einen Puffer im Speicher. Ein 'InputStream' würde nicht dasselbe tun. –
Ich füge meinen eigenen Code in die Frage ein, in der ich InputStream benutze. Ich habe darin nichts falsches gefunden. Schätzen Sie Ihre Korrektur. – Niubility