![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| BlHol |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
День добрый!
Очень часто встречаю в различных примерах вывод на консоль как System.out.println(), так и System.err.println(). И в том и в другом случаях - вывод на консоль аргумента println(). Вопросы в следующем: 1. в чем разница? 2. Чем руководствоваться при выборе .err. или .out.? Два примера: 1.
2.
Вот, ломаю голову чем обусловлено использование System.err.println() в первом случае и System.out.println() во втором? Заранее спасибо. С уважением. Это сообщение отредактировал(а) BlHol - 8.8.2007, 13:07 |
||||
|
|||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Исторически сложилось, что существует три основных потока - "ввод", "вывод", "ошибки". in, out, err
Часто "ошибки" совмещают с выводом - ибо нормально сие. Но всегда можно изменить стандартный вывод на другой - в тот же файл или еще куда. Можно посмотреть класс System - там как раз это есть. |
|||
|
||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 4 Всего: 12 |
это верно только для виндов, линуксоиды чаще всего эти потоки разделяют! -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Тогда, какая разница что использовать?
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Разница в идеологии - есть три основных потока при запуске программы, которые есть. И ими можно управлять, если очень хочется. Ибо выводить ошибки на экран не всегда хорошо, но скидывать их в лог хотелось бы. Ну и т.д. |
|||
|
||||
| BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Извиняюсь, еще немножко помучаю?
1. Если в log, то err переопределять нужно. Так? 2. Если .out.println() и .err.println() выводят результат на консоль, то какая разница между ними в данном конкретном случае? Заранее спасибо. |
|||
|
||||
| alex_smirnov |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 22.6.2007 Где: Санкт-Петербург Репутация: нет Всего: 4 |
Не знаю как в Винде, но в Линухе разделение потоков, выдающихся на консоль будет выглядеть так:
java blablabla.class > x стандартный поток вывода перенаправляется в файл; java blablabla.class >& x поток err перенаправляется в файл x; и, если я не ошибаюсь: (java blablabla.class > std) >& err разделит два потока в два файла одновременно; интересно, а как в Форточках разделять эти потоки? |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
||||
|
||||
| anglerhood |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 23.5.2007 Где: Спб Репутация: 1 Всего: 3 |
из http://java.sun.com/javase/6/docs/api/ :
А если по-русски, то в err отправляются сообщения, которые требую немедленного внимания юзера, даже если стандартный out направлен в файл или в другое место, которое постоянно не отслеживается юзером. |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
если программа отлаживается в IDE, то удобство в том, что разным цветом выводится - например, err - красным, а out - черным. |
|||
|
||||
| BlHol |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Спасибо за разъяснения!
|
|||
|
||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 4 Всего: 12 |
anglerhood, почти сказал следующее:
поток ERR - не буфферизируется, потому данные на его выход поступают сразу же; поток OUT - буфферизируется, потому данные на его выход могут поступать с задержкой; грубый пример о буфферизации: изучал JNI под Линухом, тестовый пример предполагал о каждом действии выплевывать инфу на консоль. Так вот когда я впервые увидел свой лог в консоли я сначала был удивлен: сначала вывелось всё, что java-приложение делало: - открыл файл; - запись данных в файл; - закрыл файл. , затем вывелось всё, что драйвер делал, хотя они работали "бок-о-бок": - получен указатель на файл; - записывается такой-то блок данных в файл; - указатель освобожден. -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |