cm06-io.pdf — April 27, 2005 — 1 as Architecture des Systèmes d’Information Pr´

cm06-io.pdf — April 27, 2005 — 1 as Architecture des Systèmes d’Information Pr´ esentation Flux octet Flux caract` ere S´ erialisation Programmation - Gestion des entr´ ees / sorties - Nicolas Malandain April 27, 2005 Gestion des entr´ ees / sorties 1 / 29 as Architecture des Systèmes d’Information Pr´ esentation Flux octet Flux caract` ere S´ erialisation 1 Pr´ esentation Flux Types de flux Homog´ en´ eit´ e des classes de base 2 Flux octet Pr´ esentation Description Exemples 3 Flux caract` ere Pr´ esentation Description Exemples 4 S´ erialisation Pr´ esentation ´ Ecriture/Lecture Contrˆ ole Gestion des entr´ ees / sorties 2 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Flux Types de flux Homog´ en´ eit´ e des classes de base Principe des flux Source Programme do nnée s Destination Programme do nnée s flux lecture écriture Remarques Source/Destination : “programme”, fichier (texte, binaire), BD, . . . ind´ ependance vis ` a vis du type des donn´ ees un flux est unidirectionnel les m´ ethodes d’acc` es aux flux sont identiques Gestion des entr´ ees / sorties 3 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Flux Types de flux Homog´ en´ eit´ e des classes de base Deux types de flux API des flux dans le package java.io Flux orient´ es octet (binaire) manipulation d’informations binaires sur 8 bits ` a utiliser pour lire/´ ecrire des images, sons, ... Flux orient´ es caract` ere (texte) manipulation d’informations de type caract` ere sur 16bits (unicode) ` a utiliser pour lire/´ ecrire du texte Remarque Pour l’acc` es ` a des fichiers sur disque, les flots bufferis´ es sont fortement conseill´ es (cf. transparents suivants). Gestion des entr´ ees / sorties 4 / 29 cm06-io.pdf — April 27, 2005 — 2 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Flux Types de flux Homog´ en´ eit´ e des classes de base Flux de lecture InputStream classe m` ere de l’API orient´ e octet int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length) Reader classe m` ere de l’API orient´ e caract` ere int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length) Gestion des entr´ ees / sorties 5 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Flux Types de flux Homog´ en´ eit´ e des classes de base Flux d’´ ecriture OutputStream classe m` ere de l’API orient´ e octet int write(int c) int write(byte cbuf[]) int write(byte cbuf[], int offset, int length) Writer classe m` ere de l’API orient´ e caract` ere int write(int c) int write(char cbuf[]) int write(char cbuf[], int offset, int length) Gestion des entr´ ees / sorties 6 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples Hi´ erarchie des classes FileInputStream PipedInputStream FilterInputStream ByteArrayInputStream SequenceInputStream ObjectInputStream InputStream LineNumberInputStream DataInputStream BufferedInputStream PushbackInputStream FileOutputStream PipedOutputStream FilterOutputStream ByteArrayOutputStream ObjectOutputStream OutputStream DataOutputStream BufferedOutputStream PrintStream En gris les classes li´ es ` a des conteneurs de donn´ ees En blanc les classes li´ es ` a des traitements des donn´ ees Gestion des entr´ ees / sorties 7 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples Classes en lecture Conteneurs de donn´ ees FileInputStream lecture de fichiers (octet par octet) PipedInputStream lecture des donn´ ees venant d’un PipedOutputStream ByteArrayInputStream lecture de donn´ ees dans un tampon d’octets (tableau) en m´ emoire Traitement de donn´ ees SequenceInputStream concat´ enation de flux en un seul ObjectInputStream lecture d’objets (d´ es´ erialisation d’objets java) FilterInputStream lecture en modifiant certaines donn´ ees (num´ erotation, conversions de donn´ ees, bufferisation, vue en avant, . . . ) Gestion des entr´ ees / sorties 8 / 29 cm06-io.pdf — April 27, 2005 — 3 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples Classes en ´ ecriture Conteneurs de donn´ ees FileOutputStream ´ ecriture de fichiers (octet par octet) PipedOutputStream ´ ecriture dans un flux lu par un PipedInputStream ByteArrayOutputStream ´ ecriture de donn´ ees dans un tampon d’octets (tableau) en m´ emoire Traitement de donn´ ees ObjectOutputStream ´ ecriture d’objets (s´ erialisation d’objets java) FilterOutputStream ´ ecriture en modifiant certaines donn´ ees (conversions de donn´ ees, bufferisation, facilit´ e d’affichage/formatage, . . . ) Gestion des entr´ ees / sorties 9 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples Les flux standards Les 3 flux standards Attributs de classe de System (java.util) System.in entr´ ee standard (InputStream) System.out sortie standard (PrintStream) System.err sortie d’erreur standard (PrintStream) System.out / PrintStream PrintStream h´ erite de FilterOutputStream Fonctionnalit´ es suppl´ ementaires de PrintStream : surcharges de print et println pour ´ ecrire des String, byte, int, char, float, ... System.in / InputStream InputStream lit uniquement des octets. N´ ecessit´ e d’une couche sup´ erieure pour “d´ ecoder” les octets lus, depuis Java 5 ⇒Scanner Gestion des entr´ ees / sorties 10 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples TestFluxOctet.java Scanner sc1 = new Scanner(System.in); int nbentier; double nbdouble; DataOutputStream dos = new DataOutputStream(new FileOutputStream("fichierbinaire")); do { System.out.print("Entier␣?␣"); nbentier = sc1.nextInt(); System.out.print("Double␣?␣"); nbdouble = sc1.nextDouble(); dos.writeInt(nbentier); dos.writeDouble(nbdouble); System.out.println("Continuer␣?␣O/N"); } while (sc1.next("[oOnN]").toUpperCase().equals("O")); dos.close(); DataInputStream dis = new DataInputStream(new BufferedInputStream( new FileInputStream(new File("fichierbinaire")))); while (dis.available()!=0) { System.out.println("entier␣lu␣:␣"+dis.readInt()); System.out.println("double␣lu␣:␣"+dis.readDouble()); } dis.close(); Scanner sc2 = new Scanner(args[0]).useDelimiter("[\\s\\-]+"); int nbentier2 = sc2.nextInt(); double nbdouble2 = sc2.nextDouble(); System.out.printf("entier␣:␣%d,double␣:␣%.2f␣",nbentier2,nbdouble2); Gestion des entr´ ees / sorties 11 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples Hi´ erarchie des classes BufferedReader CharArrayReader InputStreamReader FilterReader PipedReader StringReader Reader LineNumberReader FileReader PushbackReader BufferedWriter CharArrayWriter OutputStreamWriter FilterWriter PipedWriter PrintWriter StringWriter Writer FileWriter En gris les classes li´ es ` a des conteneurs de donn´ ees En blanc les classes li´ es ` a des traitements des donn´ ees Gestion des entr´ ees / sorties 12 / 29 cm06-io.pdf — April 27, 2005 — 4 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples Classes en lecture Conteneurs de donn´ ees CharArrayReader lecture de caract` eres dans un tampon d’octets (tableau) en m´ emoire FileReader lecture de caract` eres dans un fichier texte PipedReader lecture de caract` eres venant d’un PipedWriter StringReader lecture de caract` eres ` a partir d’une String Traitement de donn´ ees BufferedReader bufferisation de la lecture d’un flux caract` ere InputStreamReader conversion de flux octet en flux caract` ere FilterReader lecture en modifiant certain caract` eres (vue en avant, . . . ) Gestion des entr´ ees / sorties 13 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples Classes en ´ ecriture Conteneurs de donn´ ees CharArrayWriter ´ ecriture de caract` eres dans un tampon d’octets (tableau) en m´ emoire FileWriter ´ ecriture de caract` eres dans un fichier texte PipedWriter ´ ecriture de caract` eres dans un flux lu par un PipedReader StringWriter ´ ecriture de carac` eres dans une String Traitement de donn´ ees BufferedWriter bufferisation de l’´ ecriture dans un flux caract` ere OutputStreamWriter conversion de flux caract` ere en flux octet FilterWriter ´ ecriture en modifiant certains caract` eres PrintWriter ´ ecriture avec facilit´ e de formatage Gestion des entr´ ees / sorties 14 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation Description Exemples TestFluxCaractere.java public static void main(String[] args) throws IOException { Reader reader = new BufferedReader(new FileReader(args[0])); Writer writer = new BufferedWriter(new FileWriter(args[1])); PrintWriter pwriter = new PrintWriter(System.out); int c; while ( (c = reader.read()) != -1) { pwriter.write(c); writer.write(c); } pwriter.flush(); reader.close(); writer.close(); } Gestion des entr´ ees / sorties 15 / 29 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation ´ Ecriture/Lecture Contrˆ ole Principe de la s´ erialisation S´ erialisation Permet l’envoi d’objets ` a travers des flux, notamment des flux de fichiers permettant ainsi la persistance. En java La s´ erialisation d’objets est notamment apparu dans Java en support ` a la technique Remote Method Invocation. tout objet impl´ ementant l’interface Serializable est s´ erialisable en une suite d’octets, qui pourra ˆ etre relue pour reconstruire l’objet. Java prend en charge la s´ erialisation des r´ eseaux d’objets (tableaux d’objets, objets d’objets, ...) la s´ erialisation est ind´ ependante de la plateforme ni les attributs transient, ni les static ne sont s´ erialis´ es ` a la d´ es´ erialisation les constructeurs ne sont pas utilis´ es Gestion des entr´ ees / sorties 16 / 29 cm06-io.pdf — April 27, 2005 — 5 Pr´ esentation Flux octet Flux caract` ere S´ erialisation Pr´ esentation ´ Ecriture/Lecture Contrˆ ole Flots de s´ erialisation ObjectOutputStream / ObjectInputStream Ces deux flots permettent l’´ ecriture d’objets dans des flots, mais aussi les types simples writeObject / readObject writeInt / readInt . . . Faire qu’un objet soit s´ erialisable La classe doit impl´ ementer l’interface Serializable qui ne contient aucune m´ ethode. Gestion des entr´ ees / sorties 17 / 29 Pr´ esentation Flux uploads/Litterature/ cm06-io4.pdf

  • 34
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager