2010-05-24 10 views

Odpowiedz

3

Idą odpowiednio do strumieni systemowych stdout i stderr. W większości systemów operacyjnych są one różne i mogą być przesyłane do różnych miejsc. Na przykład może to być użyteczne, jeśli dane wyjściowe twojego programu mają zostać przeanalizowane przez inny program - jeśli trzeba zgłosić błąd, stderr będzie zwykle lepszym miejscem dla niego, ponieważ mógłbyś ustawić go tak, aby zwrócić na siebie uwagę człowieka.

12

Różnica nie jest oczywista, ponieważ domyślnie w większości systemów operacyjnych są one zapisywane na konsoli (ten sam plik, konsola jest również plikiem). Możesz jednak zapisywać do pliku System.out i zapisywać na konsoli (monitorze) - to tylko jeden scenariusz.

Napisz program, który emituje zarówno wiadomości System.out i System.err i spróbuj tego:

java MyProgram > out.txt 2> err.txt # On a *NIX. 

System.out wiadomości trafi do out.txt i System.err komunikaty do err.txt. Podstawowym punktem, o którym należy pamiętać, jest myślenie o System.out i System.err jako strumieniach do plików (czyli o tym, czym są) zamiast mechanizmu do wyprowadzania na monitorze, co uważałem za początkującego.

+3

+1 dla przykładu przekierowania. –

2

Mają takie samo zachowanie. Ale pierwszy (out) jest odniesieniem do standardowego strumienia wyjściowego (domyślnie jest to konsola). A drugi (err) jest odniesieniem do standardowego strumienia błędów (domyślnie jest to również konsola).

Ale jeśli chcesz, możesz zmienić odniesienie, lub możesz dodać opakowanie/filtr do każdego z nich.

Moje IDE, na przykład, pokazuje wyjście ze strumienia err w czerwonych kolorach.

0

System.out wysyła dane wyjściowe do standardowego strumienia wyjściowego. System.err wysyła dane wyjściowe do standardowego strumienia błędów. Domyślnie oba z nich zapisują na konsoli.

Jednak korzyścią jest to, że dwa strumienie mogą zostać przekierowane, aby można było przekierować wyjście system.out do normalnego pliku dziennika i można by było przekierować wyjście System.err do dziennika błędów.