La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Système d’Exploitation

Présentations similaires


Présentation au sujet: "Système d’Exploitation"— Transcription de la présentation:

1 Système d’Exploitation
IUT Belfort-Montbéliard 1ère année Système d’Exploitation Entrées/Sorties en Java S. Domas

2 Les flux (1) S. Domas Un flux est une représentation abstraite d’une suite d’octets à destination ou en provenance d’une ressource (fichier, périphérique, mémoire,…). On parle de flux de lecture et flux d’écriture. En Java, cela correspond aux classes InputStream et OutputStream. Pour des raisons d’efficacité, on n’utilise pratiquement jamais ces deux classes directement pour lire/écrire. On prend des classes adaptées au type de ressource et au type de données à lire/écrire.

3 Les flux (2) S. Domas Sans tenir compte de la hiérarchie de classes, il faut se poser les questions : Quelle ressource est employée ? un pipe, un fichier ordinaire, la mémoire (=un tableau, une chaîne, …), un périphérique (clavier, socket, …).

4 Les flux (3) Quelles données sont lues/écrites ? des octets,
S. Domas Quelles données sont lues/écrites ? des octets, des caractères, des types primitifs (int, double, …), des objets. Comment les données sont lues ? de manière « brute », au travers d’un tampon, au travers d’un filtre utilisateur.

5 Les ressources (1) S. Domas Pour gérer l’accès aux pipes, aux fichiers ordinaires, à la mémoire, on utilise généralement des classes spécialisées (par exemple : PipedInputStream, FileWriter, CharArrayReader, …) qui utilisent de manière transparente le flux de lecteur/écriture qui leur est associé. Pour les autres cas, il faut récupérer un flux de lecture/écriture grâce aux méthodes fournies par la classe représentant la ressource. Par exemple : Socket sock = new Socket( …); // crée une socket OutputStream os = sock.getOutputStream(); // récupère le flux d’écriture de la socket.

6 Les ressources (2) S. Domas Pour certains cas, l’API Java fourni directement un flux, sans avoir besoin de créer un objet représentant la ressource. Par exemple, le flux de lecture associé au clavier est accessible grâce à l’attribut System.in. Remarque : System.out n’est pas un OutputStream mais un PrintWriter. (voir transp. 12)

7 Les types de données (1) S. Domas Pour lire/écrire simplement des octets, on utilise des classes différentes selon la ressource. Par exemple : FileInputStream, FileOutputStream : pour les fichiers PipedInputStream, PipedOutputStream : pour les pipe InputStream, OutputStream : pour les socket, le clavier, …

8 Les types de données (2) S. Domas Pour lire/écrire autre chose que des octets, on « encapsule » un flux d’octets dans une classe de conversion, adaptée au type de données : DataInputStream, DataOutputStream : pour des données primaires (int, double, …) ObjectInputStream, ObjectOutputStream : pour des objets InputStreamReader, OutputStreamWriter : pour des caractères. Cette encapsulation se fait en passant l’objet flux au constructeur de la classe de conversion.

9 Les types de données (3) Exemples :
S. Domas Exemples : // convertit le flux d’octets en flux de données primaires DataInputStream dis = new DataInputStream(System.in); dis.readInt() // lit un entier à partir du clavier. File fich = new File("toto"); FileOutputStream fis = new FileOutputStream(fich); // crée le flux de sortie sur le fichier // convertit le flux d’octets en flux de caractères. OutputStreamWriter osw = new OutputStreamWriter(fis); osw.write("bonjour", 0, 5) // écrit bonjo dans toto

10 Les types de données (4) Exemples :
S. Domas Exemples : A a = new A(…); Socket sock = new Socket( …); OutputStream sis = sock.getOutputStream(); // récupère le flux de sortie de la socket // convertit le flux d’octets en flux d’objet ObjectOutputStream ois = new ObjectOutputStream(sis); ois.writeObject(a); // envoi l’objet a

11 Les conversions/filtres (1)
S. Domas Le fait de lire/écrire des caractères, des données primaires ou des objets constitue déjà un filtrage du type conversion. Pour améliorer les performances de lecture/écriture, ou pour faire des traitements particuliers sur les données, on peut utiliser des classes prédéfinies de filtrage. Le filtrage le plus courant est d’utiliser un tampon qui évite d’accéder trop souvent à la source : BufferedReader, BufferedWriter, BufferedInputStream, BufferedOutputStream.

12 Les conversions/filtres (2)
S. Domas Le programmeur peut également écrire ses propres filtres en héritant des classes FilterXXX. Par exemple, on peut créer une classe qui hérite de FilterReader et qui permet de lire directement une ligne de mots séparés par des virgules. PrintStream et PrintWriter sont des classes additionnelles qui permettent d’utiliser une méthode Print sur un flux de sortie. Par exemple : System.out.println("bonjour " + name + ". Ca va ? ");


Télécharger ppt "Système d’Exploitation"

Présentations similaires


Annonces Google