参数长度太长

时间:2010-10-21 15:37:35

标签: java string command-line

我有一个java程序,我需要将一个长度为8k字符的参数传递给它的main方法。因此,当我尝试执行此程序传递该参数时,它只是不执行,但没有显示错误消息。如何正确执行该程序?

2 个答案:

答案 0 :(得分:4)

您的shell可能不允许执行具有高于系统限制的参数列表的程序。假设可以修改你的java程序,你应该添加一个选项来从文件而不是命令行获取参数的值。

您还可以编写一个可以调用main

的包装器
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class MyWrapper
{
    public static void main(String[] args) throws Exception
    {
        FileReader reader = new FileReader(args[0]);

        //assuming the data is the first argument
        args[0] = getStringFromReader(reader);

        //invoke real main
        MyClass.main(args);

    }

    public static String getStringFromReader(Reader reader) throws IOException
    {
        final int BUFFER_SIZE = 4096;
        char[] buffer = new char[BUFFER_SIZE];
        Reader bufferedReader = new BufferedReader(reader, BUFFER_SIZE);
        StringBuffer stringBuffer = new StringBuffer();
        int length = 0;
        while ((length = bufferedReader.read(buffer, 0, BUFFER_SIZE)) != -1)
        {
            stringBuffer.append(buffer, 0, length);
        }
        reader.close();

        return stringBuffer.toString();
    }
}

然后,你只需要像这样调用java:

java MyWrapper my-file-containing-8k-data [other-args...]

答案 1 :(得分:2)

最佳解决方案是将此8k参数存储在文件中,并将文件名作为参数传递。然后在main方法中打开此文件并读取8k字符。