Длина параметра слишком велика - PullRequest
0 голосов
/ 21 октября 2010

У меня есть Java-программа, и мне нужно передать ее основному методу параметр длиной 8k символов.Поэтому, когда я пытаюсь выполнить эту программу, передавая этот параметр, она просто не выполняется, но сообщение об ошибке не отображается.Как я могу правильно выполнить эту программу?

Ответы [ 2 ]

4 голосов
/ 21 октября 2010

Возможно, ваша оболочка не позволит запустить программу, у которой список аргументов превышает системный лимит.Предполагая, что вы можете изменить вашу 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...]

2 голосов
/ 21 октября 2010

Лучшее решение - сохранить этот параметр 8k внутри файла и передать имя файла в качестве параметра. Затем внутри вашего основного метода вы должны открыть этот файл и прочитать 8k символов.

...