Максимальная длина строкового аргумента в Java Processbuilder
Я знаю, что есть ограничение строки, когда мы запускаем приложение из командной строки / терминала, которое зависит от ОС.
Но если мы используем Java ProcessBuilder для выполнения приложения, есть ли максимальная длина строки для передачи в качестве аргумента в java ProcessBuilder?
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
Спасибо
2 ответа
Если вы посмотрите на исходный код ProcessBuilder, то создание процесса делегируется конкретной ОС java.lang.ProcessImpl
,
Например, версия для Windows ProcessImpl
вызывает CreateProcess в Win API, передавая строку командной строки. Документация по параметру lpCommandLine
гласит: "Максимальная длина этой строки составляет 32 768 символов".
Так что да, будут ограничения по длине, зависящие от ОС, в зависимости от функции ОС для создания процесса.
Java не ограничивает длину. Вы можете передать n параметров, но это зависит от ОС.
Описание из Java Doc ProcessBuilder
Создает построитель процессов с указанной программой операционной системы и аргументами. Это удобный конструктор, который устанавливает команду построителя процесса в список строк, содержащий те же строки, что и массив команд, в том же порядке. Не проверяется, соответствует ли команда действительной команде операционной системы.
Обычно мы не передаем более 4 аргументов в командной строке, вместо этого сохраняем все в файле и предоставляем имя файла в качестве единственного аргумента и используем файл конфигурации.