| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Принципиальные различия в консольных выводах? |
| Автор: BlHol 8.8.2007, 13:06 | ||||
| День добрый! Очень часто встречаю в различных примерах вывод на консоль как System.out.println(), так и System.err.println(). И в том и в другом случаях - вывод на консоль аргумента println(). Вопросы в следующем: 1. в чем разница? 2. Чем руководствоваться при выборе .err. или .out.? Два примера: 1.
2.
Вот, ломаю голову чем обусловлено использование System.err.println() в первом случае и System.out.println() во втором? Заранее спасибо. С уважением. |
| Автор: AntonSaburov 8.8.2007, 13:44 |
| Исторически сложилось, что существует три основных потока - "ввод", "вывод", "ошибки". in, out, err Часто "ошибки" совмещают с выводом - ибо нормально сие. Но всегда можно изменить стандартный вывод на другой - в тот же файл или еще куда. Можно посмотреть класс System - там как раз это есть. |
| Автор: Metal_Heart 8.8.2007, 13:54 |
это верно только для виндов, линуксоиды чаще всего эти потоки разделяют! |
| Автор: BlHol 8.8.2007, 14:13 |
| Тогда, какая разница что использовать? |
| Автор: AntonSaburov 8.8.2007, 14:41 |
Разница в идеологии - есть три основных потока при запуске программы, которые есть. И ими можно управлять, если очень хочется. Ибо выводить ошибки на экран не всегда хорошо, но скидывать их в лог хотелось бы. Ну и т.д. |
| Автор: BlHol 8.8.2007, 15:06 |
| Извиняюсь, еще немножко помучаю? 1. Если в log, то err переопределять нужно. Так? 2. Если .out.println() и .err.println() выводят результат на консоль, то какая разница между ними в данном конкретном случае? Заранее спасибо. |
| Автор: alex_smirnov 8.8.2007, 15:23 |
| Не знаю как в Винде, но в Линухе разделение потоков, выдающихся на консоль будет выглядеть так: java blablabla.class > x стандартный поток вывода перенаправляется в файл; java blablabla.class >& x поток err перенаправляется в файл x; и, если я не ошибаюсь: (java blablabla.class > std) >& err разделит два потока в два файла одновременно; интересно, а как в Форточках разделять эти потоки? |
| Автор: anglerhood 8.8.2007, 15:36 | ||
из http://java.sun.com/javase/6/docs/api/ :
А если по-русски, то в err отправляются сообщения, которые требую немедленного внимания юзера, даже если стандартный out направлен в файл или в другое место, которое постоянно не отслеживается юзером. |
| Автор: COVD 8.8.2007, 16:04 | ||
если программа отлаживается в IDE, то удобство в том, что разным цветом выводится - например, err - красным, а out - черным. |
| Автор: BlHol 8.8.2007, 16:22 |
| Спасибо за разъяснения! |
| Автор: Metal_Heart 8.8.2007, 16:35 |
| anglerhood, почти сказал следующее: поток ERR - не буфферизируется, потому данные на его выход поступают сразу же; поток OUT - буфферизируется, потому данные на его выход могут поступать с задержкой; грубый пример о буфферизации: изучал JNI под Линухом, тестовый пример предполагал о каждом действии выплевывать инфу на консоль. Так вот когда я впервые увидел свой лог в консоли я сначала был удивлен: сначала вывелось всё, что java-приложение делало: - открыл файл; - запись данных в файл; - закрыл файл. , затем вывелось всё, что драйвер делал, хотя они работали "бок-о-бок": - получен указатель на файл; - записывается такой-то блок данных в файл; - указатель освобожден. |