Pregunta

Quiero analizar el contenido de algún archivo por srcml analizador que es un programa de Windows externo.Estoy haciendo esto de una manera siguiente:

String command = "src2srcml.exe --language java";
Process proc = Runtime.getRuntime().exec(command);

InputStream fileInput = Files.newInputStream(file)
OutputStream procOutput = proc.getOutputStream();

IOUtils.copy(fileInput, procOutput);

outils.copy () es de la biblioteca Commons IO 2.4.

Cuando mi archivo es pequeño (varios KB) todo funciona bien.Sin embargo, cuando intento copiar un archivo relativamente grande (~ 72 KB) que cuelga mi programa.

Además, cuando ejecuto el analizador 'manualmente' en CMD:

src2srcml.exe --language Java < BigFile.java

Todo funciona bien, también.

¿Alguna idea de que esto está sucediendo?

¿Fue útil?

Solución

Usted debe buffer la corriente de salida:

OutputStream procOutput = proc.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(procOutput);
IOUtils.copy(fileInput, bos);

Además, ¿por qué simplemente no redirigue a FileInput como el proceso de entrada del proceso?

 ProcessBuilder pb = new ProcessBuilder(command);
 pb.redirectInput(file);
 Process proc = pb.start();
 proc.waitFor();

Otros consejos

El problema es más probable que no esté consumiendo la salida del programa externo en un hilo separado.Debe iniciar un hilo separado para consumir la salida para que el programa externo no se bloquee.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top