Максимальная длина строкового аргумента в 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 аргументов в командной строке, вместо этого сохраняем все в файле и предоставляем имя файла в качестве единственного аргумента и используем файл конфигурации.

Другие вопросы по тегам