2016-09-19 60 views
0

将大约800K字符(是的,这是一个巨大的数字)传递给java jar的最佳方式是将字符串(arg1用于下面的代码)。以下是我使用调用的jar文件的代码:jar文件不接受java中的巨大字符串

p = Runtime.getRuntime().exec(jrePath+"/bin/java -jar C:/folder/myjar.jar methodName" + arg1); 

交替,如何创建一个jar文件,接受一个String输入和一个byte[]输入主{在void main(String args[])}

或任何其他想法?该要求是莫名其妙的String巨大String/byte[]传递给我创造

+3

也许你应该使用,而不是一个'String'临时文件。然后让程序解析该文件。 – flakes

+2

我非常怀疑这个问题来自jar文件。你的命令行更有可能不允许这种荒谬的长时间输入。如上所述,请改用文件。 – Tom

+1

您也可以将数据写入程序的标准输入。 – Kayaman

回答

1

正如this question提到一个java jar文件,还有一个最大的参数长度由操作系统设置。看到这种说法是800K个字符,可以相当安全地说,在大多数计算机上你已经超过了这个最大值。为了解决这个问题,你可以使用内置的API编写arg1到一个临时文件:

final File temp; 
try { 
    temp = File.createTempFile("temp-string", ".tmp"); 
} catch (final IOException e){ 
    //TODO handle error 
    return; 
} 
try (final BufferedWriter writer = new BufferedWriter(new FileWriter(temp))) { 
    writer.write(arg1); 
} catch (final IOException e){ 
    //TODO handle error 
    return; 
} 
try { 
    // run process and wait for completion 
    final Process process = Runtime.getRuntime().exec(
     jrePath + "/bin/java -jar C:/folder/myjar.jar methodName " + 
     temp.getAbsolutePath()); 
    final int exitCode = process.waitFor(); 
    if (exitCode != 0) { 
     //TODO handle error 
    } 
} catch (final IOException | InterruptedException e){ 
    //TODO handle error 
    return; 
} 
if (!file.delete()) { 
    //TODO handle error 
} 
相关问题