Dans le code source de FileDescriptor.java nous variables statiques suivantes:Comportement inattendu des classes FileInputStream et FileOutputStream, lorsqu'il est utilisé avec et des membres statiques de FileDescriptor en JAVA
/**
* A handle to the standard input stream. Usually, this file
* descriptor is not used directly, but rather via the input stream
* known as <code>System.in</code>.
*
* @see java.lang.System#in
*/
public static final FileDescriptor in = new FileDescriptor(0);
/**
* A handle to the standard output stream. Usually, this file
* descriptor is not used directly, but rather via the output stream
* known as <code>System.out</code>.
* @see java.lang.System#out
*/
public static final FileDescriptor out = new FileDescriptor(1);
J'utilise ici directement , pas comme System.out. Vérifiez maintenant le programme suivant:
import java.io.*;
public class First
{
public static void main(String[] args) throws Exception
{
FileInputStream fis = new FileInputStream(FileDescriptor.out);
byte[] b = new byte[8];
System.out.println(fis.read(b));//6
for(byte b1: b)
{
System.out.println(b1);
}
}
}
Entrée
hello
Sortie
6
104
101
108
108
111
10
0
0
Notez que, même si j'utilise FileDescriptor.out dans le constructeur, il ne donne aucune erreur et fonctionne parfaitement pour le flux d'entrée standard.
Vérifiez un programme plus:
import java.io.*;
public class First
{
public static void main(String[] args) throws Exception
{
FileOutputStream fos = new FileOutputStream(FileDescriptor.in);
byte[] b = {65, 66, 67};
fos.write(b);
}
}
Sortie
ABC
Notez que, même si j'utilise FileDescriptor.in dans le constructeur, il ne donne aucune erreur et fonctionne parfaitement pour la flux de sortie standard.
Je sais que FileDescriptor dans Java est opaque, et je ne devrais pas le comparer avec le concept de descripteur de fichier sous Linux. Je veux juste savoir comment il est créé en Java. Et si une variable statique peut lire et écrire, alors quel est le besoin de trois (in, out et err).
J'ai essayé vos deux extraits de code et dans les deux cas j'ai une exception java.io.IOException: l'accès est refusé. Quelle est exactement votre question? – Armine
En outre, vérifiez ceci: http://tutorials.jenkov.com/java-io/system-in-out-error.html pour plus de détails sur System.in, System.out et System.err. – Armine
Il montre une erreur sur Windows mais s'exécute sous Linux. –