2010-05-24 8 views
7

Comme je sais à la fois out et err sont de même classe PrintStream. Quelqu'un peut-il me dire comment ils diffèrent ... comment ils ont changé leur comportement?différence entre system.out et system.err

+0

http://en.wikipedia.org/wiki/Standard_streams – stacker

Répondre

3

Ils vont respectivement aux flux stdout et stderr du système. Sur la plupart des systèmes d'exploitation, ils sont distincts et peuvent être envoyés à différents endroits. Par exemple, cela pourrait être utile si la sortie de votre programme devait être analysée par un autre programme - si elle devait signaler une erreur, stderr serait normalement le meilleur endroit pour cela car vous pourriez l'avoir configuré pour attirer l'attention d'un humain.

12

La différence n'est pas évidente car, par défaut, dans la plupart des systèmes d'exploitation, ils sont écrits sur la console (même fichier, la console est également un fichier). Cependant, vous pouvez écrire System.out dans un fichier et System.err écrire sur la console (moniteur) - ceci est juste un scénario.

Ecrivez un programme qui émet à la fois des messages System.out et System.err et essayez ceci:

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

messages System.out iront à Out.txt et System.err messages seront à err.txt. Le point de base à retenir est de considérer System.out et System.err comme des flux vers des fichiers (ce qui est ce qu'ils sont) au lieu d'un mécanisme de sortie sur le moniteur, ce que j'ai supposé en tant que débutant.

+3

+1 pour l'exemple de redirection. –

2

Ils ont le même comportement. Mais le premier (out) est une référence au flux de sortie standard (par défaut c'est une console). Et second (err) est une référence au flot d'erreurs standard (par défaut c'est aussi une console). Mais si vous le souhaitez, vous pouvez modifier une référence ou ajouter un wrapper/un filtre à chacun d'entre eux.

Mon IDE, par exemple, affiche la sortie du flux err dans les couleurs rouges. System.out envoie la sortie au flux de sortie standard.

0

System.err envoie la sortie au flux d'erreurs standard. Par défaut, ces deux éléments sont écrits sur la console.

Toutefois, l'avantage est que les deux flux peuvent être redirigés afin que la sortie system.out puisse être redirigée vers votre fichier journal normal et que la sortie System.err puisse être redirigée vers un journal des erreurs.