2015-08-25 3 views
0

Я знаю, что существует ограничение строки при выполнении приложения из командной строки/терминала, которое зависит от ОС.
Но если мы используем Java ProcessBuilder для выполнения приложения, существует ли какая-либо максимальная длина строки, которая будет передана как аргумент в java ProcessBuilder?Максимальная длина аргумента строки в java processbuilder

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 

Благодаря

+0

Для меня это запах рыбный. Вы пытаетесь передать огромные файлы в виде текста? – SBI

+0

Мы не пропускаем более 4 аргументов в командной строке, а сохраняем все в файле и предоставляем имя файла как одиночный arg – vels4j

+0

@SBI что-то в этом роде, я хочу передать большую строку JSON, возможно, около 1 мегабайта. – esthrim

ответ

2

Если вы посмотрите исходный код ProcessBuilder, процесс создания делегируется конкретной ОС java.lang.ProcessImpl.

Например, версия Windows ProcessImpl вызывает CreateProcess в Win API, передавая строку командной строки. В документации для параметра lpCommandLine указано: «Максимальная длина этой строки - 32 768 символов».

Так что да, будут ограничения по конкретной ОС, основанные на функции ОС для создания процесса.

1

Java оленья кожа ограничивает длину. Вы можете передать n параметров, но это зависит от ОС.

Описание от Java Doc ProcessBuilder

конструктов процесс с указанным системной программой работы и аргументами. Это конструктор удобства, который устанавливает команду строителя процесса в список строк, содержащий те же строки, что и массив команд, в том же порядке. Он не проверяется, соответствует ли команда действительной команде операционной системы.

Обычно мы не передаем более 4 аргументов в командной строке, а сохраняем все в файле и предоставляем имя файла в качестве единственного аргумента и используем конфигурационный файл.

Смежные вопросы