Διαδικτυακές Εφαρμογές Ενότητα 4: Streams Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Streams
Σκοποί ενότητας Σε αυτή την ενότητα ασχολούμαστε με τα Streams στη γλώσσα προγραμματισμού Java. 5
Περιεχόμενα ενότητας (1/3) Εισαγωγή στα Streams. Είδη Streams. Οι κλάσεις Writer/Reader και OutputStream/InputStream. Η κλάση System. Παράδειγμα εισόδου με την κλάση System. 6
Περιεχόμενα ενότητας (2/3) Παράδειγμα εξόδου με την κλάση System. Data Streams. Κατασκευαστής και Μέθοδοι του DataInputStream. Κατασκευαστής και Μέθοδοι του DataOutputStream. Data Sink Streams. 7
Περιεχόμενα ενότητας (3/3) Processing Streams. Console I/O. File Streams. Παράδειγμα File Reader/Writer. 8
Εισαγωγή στα Streams Stream. Ένα γενικό κανάλι, στο οποίο υπάρχει ροή δεδομένων. Με την βοήθεια των Streams, τα προγράμματα Java εισάγουν και εξάγουν δεδομένα, επικοινωνώντας. Μεταξύ τους. Με το σύστημα αρχείων (file system). Με κάποια συσκευή (device). 9
Είδη Streams InputStream OutputStream. Αποτελούν την βάση για όλα τα υπόλοιπα. DataInputStream DataOutputStream. Ανάγνωση/εγγραφή πρωτογενών τύπων δεδομένων της Java. BufferedInputStream BufferedOutputStream. Χρησιμοποιούνται για να αυξήσουν την ταχύτητα και απόδοση του συστήματος σε περιπτώσεις Ι/Ο. 10
Streams (1/2) Υπάρχουν διαφορετικοί τύποι Streams. Επιτρέπουν να διαβάζονται/γράφονται χαρακτήρες, Bytes, γραμμές και άλλα. Το πακέτο που χρησιμοποιείται για τα Streams στη Java είναι το java.io. Η κλάση System του πακέτου java.lang παρέχει τα τρία παρακάτω Streams. System.in standard input. Inputsteam και Είσοδος από το πληκτρολόγιο. 11
Streams (2/2) Η κλάση System του πακέτου java.lang παρέχει τα τρία παρακάτω Streams (Συνέχεια). System.out standard output. Printwriter. Έξοδος στην οθόνη. System.err standard error. Printwriter και Έξοδος στην οθόνη. 12
Οι κλάσεις Writer/Reader και OutputStream/InputStream Writer/Reader. Αφηρημένες κλάσεις. Επιτρέπουν την εγγραφή και ανάγνωση χαρακτήρων, αντίστοιχα. OutputStream/InputStream. Αφηρημένες κλάσεις. Επιτρέπουν την εγγραφή και την ανάγνωση Bytes, αντίστοιχα. 13
Η κλάση System H κλάση System περιέχει αρκετά βασικά αντικείμενα, τα οποία μπορούν να χρησιμοποιηθούν για λειτουργίες Ι/Ο. το αντικείμενο System.in, τύπου InputStream και βρίσκει εφαρμογή σε λειτουργίες εισόδου από το στάνταρ stream εισόδου. 14
Παράδειγμα εισόδου με την κλάση System 15
Παράδειγμα εξόδου με την κλάση System 16
Data Streams Γράφουν και διαβάζουν βασικούς τύπους δεδομένων της Java. Οι μέθοδοι ανάγνωσης προκαλούν ένα EOFexception όταν τελειώσουν τα δεδομένων. 17
Κατασκευαστής και Μέθοδοι του DataInputStream (1/2) Constructor. public DataInputStream(InputStream in). Μέθοδοι. read(byte[]). readboolean(). readbyte(). 18
Κατασκευαστής και Μέθοδοι του DataInputStream (2/2) Μέθοδοι (Συνέχεια). readchar(). readfloat(). readint(). readline(). readlong(). 19
Κατασκευαστής και Μέθοδοι του DataOutputStream (1/2) Constructor. public DataOutputStream(OutputStream out). Μέθοδοι. flush(). size(). 20
Κατασκευαστής και Μέθοδοι του DataOutputStream (2/2) Μέθοδοι (Συνέχεια). writechar(int). writedouble(double). writeint(int). 21
Data Sink Streams (1/2) Μπορούν να διαβάσουν ή να γράψουν στα data sinks όπως strings, files ή pipes. CharArrayReader/CharArrayWriter και ByteArrayInputStream/ByteArrayOutputStream. Διαβάζουν και γράφουν στη μνήμη. Μπορούν να εφαρμοστούν σε έναν πίνακα (Array). StringReader και StringWriter. Διαβάζουν και γράφουν σε ένα string buffer. 22
Data Sink Streams (2/2) PipedReader/PipedWriter και PipedInputStream/PipedOutputStream. Είναι τα συστατικά ενός Pipe. Τα Pipes δίνουν την έξοδο ενός προγράμματος ή νήματος (thread) ως είσοδο σε ένα άλλο. FileReader/FileWriter και FileInputStream/FileOutputStream. Διαβάζουν και γράφουν σε ένα αρχείο. 23
Processing Streams (1/4) BufferedReader/BufferedWriter και BufferedInputStream/BufferedOutputStream. Δημιουργούν ένα Buffer ενώ διαβάζουν και γράφουν βελτιώνοντας την ταχύτητα. FilterReader/FilterWriter και FilterInputStream/FilterOutputStream. Αφηρημένες κλάσεις. Φιλτράρουν τα δεδομένα. 24
Processing Streams (2/4) InputStreamReader και OutputStreamWriter. Είναι γέφυρες μεταξύ των Streams χαρακτήρων και των Bytes. InputStreamReader. Διαβάζει Bytes από ένα InputStream και τα μετατρέπει σε χαρακτήρες. Η OutputStreamWriter. Μετατρέπει χαρακτήρες σε Bytes και τα γράφει σε ένα OutputStream. 25
Processing Streams (3/4) ObjectInputStream και ObjectOutputStream. Serialization και deserialization ενός Object. SequenceInputStream. Δημιουργεί μία αλληλουχία πολλών InputStreams ενώνοντάς τα σε ένα. DataInputStream και DataOutputStream. Γράφουν και διαβάζουν βασικούς τύπους δεδομένων της Java. 26
Processing Streams (4/4) LineNumberReader και LineNumberInputStream. Διαβάζουν γραμμή - γραμμή ένα Stream. PrintWriter και PrintStream. Χρησιμοποιούνται συχνά. Περιέχουν μεθόδους για εύκολη εκτύπωση. Συνήθως άλλα Streams καταλήγουν σε αυτές τις δύο κλάσεις. 27
Console I/O (1/2) Οι κλάσεις system.in και system.out. Αυτές οι κλάσεις είναι τύπου InputStream και PrintStream, αντίστοιχα. Περιλαμβάνονται στο πακέτο java.lang. Συνήθως χρησιμοποιείται. 28
Console I/O (2/2) Για integer. 29
File Streams Ο μέθοδος δημιουργός (constructor) ενός File Stream δέχεται ως παραμέτρους. Ένα String για το File name ή ένα File Object. Όταν ένα Stream συνδεθεί με ένα αρχείο. Μπορούμε να διαβάσουμε ή να γράψουμε από/προς το αρχείο μέσω του Stream. Παρακάτω χρησιμοποιούμε τα Streams ώστε να αντιγράψουμε ένα αρχείο σε ένα άλλο. 30
Παράδειγμα File Reader/Writer 31
Βιβλιογραφία 1. Java προγραμματισμός, Όγδοη έκδοση, Deitel Paul J., Deitel Harvey M., Εκδόσεις Γκιούρδας Μ.. 2. «Προγραμματισμός Internet και World Wide Web», Deitel Paul J., Deitel Harvey M., Εκδόσεις Γκιούρδας Μ.. 3. «Πλήρες εγχειρίδιο της Java 6», Lemay C, Εκδόσεις Γκιούρδας Μ., Αθήνα 2007. 32
Τέλος Ενότητας 33