В Java 9 почему вывод из System.getenv() неполон в jshell?
Я использую Windows 10 и работаю с версией Java 9, выпущенной вчера Oracle.
Если я открою jshell и введу System.out.println(System.getenv()), результат будет таким, как ожидалось, как показано в нижней части снимка экрана ниже.
Однако, если я просто введу System.getenv (), в середине вывода будет отсутствовать большой кусок данных. Смотрите начальную часть снимка экрана ниже. Похоже, что это особенность jshell, поскольку на снимке экрана ниже многоточия (" ... ") в выводе из System.getenv () (во втором поле с нарисованными от руки желтыми краями) точно соответствует отсутствующим данным.
Конечная часть для переменной среды CommonProgramFiles отсутствует, как и начало переменной среды SPRING_HOME, и есть несколько других переменных среды, таких как Path, которые вообще не отображаются.
(Некоторая информация на снимке экрана была размыта для конфиденциальности.)
Кто-нибудь еще видит то же самое (или нет), и есть ли у кого-нибудь предложения о том, почему jshell делает это?
1 ответ
JShell действительно усекает некоторые строковые результаты, которые печатаются в REPL. Однако это не влияет на печать на консоли.
Мы можем видеть то же самое, что происходит при выполнении этого:
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
List<Integer> x = IntStream.range(0,3000).mapToObj(Integer::valueOf).collect(Collectors.toList());
x
Мы увидим то же усечение с многоточием в этом выводе.
Если мы напечатаем результат:
System.out.println(x);
мы этого не видим.
Это настраивается пользователем. Например, мы можем создать режим пользовательского формата, который позволяет использовать до 40000 символов (слишком большое число, которое мы, скорее всего, не встретим, поэтому усечение не происходит).
/set mode mine normal -command
/set truncation mine 40000
/set feedback mine
Это создает новый режим обратной связи, называемый моим, который наследует от встроенного режима normal† (по-видимому, существует множество опций, поэтому мы наследуем от другого режима, чтобы нам не пришлось беспокоиться о настройке всего). Увидеть /help /set mode
для деталей.
Вторая команда устанавливает усечение до 40000 символов. Это можно настроить так, чтобы усечение зависело от того, что именно отображается. Увидеть /help /set truncation
для деталей.
Наконец, последняя команда здесь переключается в этот режим обратной связи. Теперь любая вещь, отображаемая в консоли, больше не будет усечена, если она не превышает 40000 символов.
Эта ссылка вместе с официальной документацией и командами помощи, приведенными выше, помогла выяснить это, чтобы написать ответ.
† Нормальный режим показывает до 1000 символов перед усечением. использование /set truncation
сам по себе, чтобы отобразить различные параметры усечения или /set truncation normal
для отображения настроек для нормального режима.