Должен ли я использовать System.out.println () или что-то еще? - PullRequest
5 голосов
/ 23 июля 2010

Я некоторое время программировал на Java, но у меня все еще есть несколько острых вопросов по основам. Я слышал, что я должен использовать System.out.println () для отображения данных от некоторых людей, а другие дали мне разные идеи (например, PrintStream или что-то еще). Какой лучший способ печати на консоли в Java?

Ответы [ 9 ]

15 голосов
/ 23 июля 2010

Если вы только начинаете и хотите напечатать некоторые строки в консоли, тогда System.out.println () будет в порядке. Изучите основы, и вы сможете погрузиться в тонкости Java I / O.

14 голосов
/ 23 июля 2010

System.out - это a PrintStream.

Если вашей главной целью является взаимодействие с консолью, посмотрите на java.io.Console.Если вашей главной целью является ведение журналов, используйте каркас журналирования, такой как Java Logging API или log4j.

2 голосов
/ 23 июля 2010

System.out хорош для печати на консоли. Тем не менее, я обнаружил, что попытка использовать вместо этого java.util.logging была лучшим выбором для меня. (Или какая-то система регистрации.)

Это зависит от того, какую информацию вы пытаетесь отобразить. Если это для взаимодействия с пользователем консоли, System.out идеально подходит. Если он отображает информацию об отладке, возможно, логирование - это то, что нужно, поскольку он позволяет вам гораздо больше контролировать вещи, если вы этого хотите.

(После первоначальной настройки утилиты ведения журнала почти прозрачны, как при использовании System.out.)

1 голос
/ 23 июля 2010

Вид зависит от того, что вы делаете. Почти всегда я бы предложил использовать API журналирования Java (java.util.logging). System.out.println - это скорее «инструмент отладки», но даже в этом случае вы получаете гораздо больший контроль над выводом, используя JDK logging API…

0 голосов
/ 23 июля 2010

Да, самый простой и эффективный способ печати на консоли обычно System.out.print () и System.out.println (), но если у вас есть большой объем выходных данных для отправки, System.out.println () может быть неэффективным, потому что он буферизован и выполняет много работы, связанной с для обработки Unicode. Из-за своего небольшого размера буфера System.out.println () не очень подходит для обработки множества повторяющихся выходных данных в пакетном режиме. Каждая строка очищается сразу. В этом случае вы можете использовать BufferedOutputStream или BufferedWriter.

Важно отметить, что System.out не всегда идет в консоль приложения или терминал. System.out указывает на применение стандартного выходного канала; в C / C ++ это называется stdout. Это может идти к консоли, но это может также пойти куда угодно, что Пользователь решает отправить его. Например, файл, тогда все, что напечатано в System.out, окажется в файле мой-приложение-output.txt.

Итак, если вы хотите отправить обычный вывод, используйте System.out. если ты хотите отправить сообщение об ошибке или уведомление пользователя, с большим шанс зайти в консоль, используйте System.err.print () и System.err.println ().

Не существует портативного способа получить канал для «настоящей» консоли. в версиях Java до 1.6. В 1.6 есть класс объекта специально для представления консоли: java.io.Console. Ссылка к этому уникальному объекту можно получить из класса System с помощью статический метод console ().

Но если ваше требование состоит в отладке всего приложения, то, как все говорили, использование логгеров - лучший подход.

0 голосов
/ 23 июля 2010

Я предлагаю использовать API Java Logging

0 голосов
/ 23 июля 2010

ю можно установить

System.setOut (новый PrintStream ("all-my-sysouts-go-in-this-file.txt");

а потом делать сысойц ...

вы можете отслеживать их, используя baretail ...

надеюсь, это поможет ..

Радж.

0 голосов
/ 23 июля 2010

Использование System.out напрямую - самый простой и обычно самый эффективный способ. Если у вас есть что напечатать, вы можете исследовать, используя BufferedOutputStream.

Есть некоторые преимущества, которые можно получить, создав строки, которые будут печататься более эффективно. Если выполняется много конкатенации, посмотрите на StringBuilder.

0 голосов
/ 23 июля 2010

Используйте log4j и прямой вывод на стандартный вывод. Затем его легко переключаться на файлы журналов по мере необходимости.

...