Εισαγωγή στ α Streams
description
Transcript of Εισαγωγή στ α Streams
1
Εισαγωγή στα Streams Υπάρχουν πάνω από 60 κλάσεις για Υπάρχουν πάνω από 60 κλάσεις για input/output input/output στο στο πακέτοπακέτο java.io.*; java.io.*; Ενα αντικείμενο από το οποίο μπορεί να διαβαστεί μια Ενα αντικείμενο από το οποίο μπορεί να διαβαστεί μια ακολουθίαακολουθία bytes bytes λέγεται λέγεται input stream input stream και ένα αντικείμενο στο οποίο και ένα αντικείμενο στο οποίο μπορεί μπορεί να γραφτεί μια ακολουθία να γραφτεί μια ακολουθία bytes bytes λέγεται λέγεται output stream.output stream. Στη Στη java java υπάρχουν κλάσεις υπάρχουν κλάσεις InputStreamInputStream και και OutputStreamOutputStream για για διάβασμα ή γράψιμο μη χαρακτηρικών δεδομένωνδιάβασμα ή γράψιμο μη χαρακτηρικών δεδομένων (bytes) (bytes) καικαι ReaderReader και και WriterWriter κλάσεις για διάβασμα ή γράψιμο κλάσεις για διάβασμα ή γράψιμο χαρακτήρωνχαρακτήρων (για (για UnicodeUnicode χαρακτήρες χαρακτήρες)). . Οι παραπάνω κλάσεις διαθέτουν Οι παραπάνω κλάσεις διαθέτουν abstract abstract μεθόδους γιαμεθόδους για διάβασμα/ γράψιμο διάβασμα/ γράψιμο read read και και writewrite.. abstract int read(), abstract void write(int b)abstract int read(), abstract void write(int b)
2
Streams Εισόδου – Εξόδου ( I ) Οι κλάσεις αυτές όμως δε διαθέτουν όμως μεθόδους Οι κλάσεις αυτές όμως δε διαθέτουν όμως μεθόδους για διάβασμαγια διάβασμα//γράψιμο αριθμών ή γράψιμο αριθμών ή strings. strings. Ετσι Ετσι χρησιμοποιούνται οι κλάσεις χρησιμοποιούνται οι κλάσεις DataInputStream,DataInputStream, DataOutputSteeamDataOutputSteeam οι οποίες χειρίζονται βασικούς οι οποίες χειρίζονται βασικούς τύπουςτύπους π.χ. π.χ. int, double, float.int, double, float. void writeBoolean(boolean v)void writeBoolean(boolean v), boolean readBoolean(),, boolean readBoolean(),
void writeChar(char ch), char readChar(),void writeChar(char ch), char readChar(),
void writeDouble(double d), double readDouble(),void writeDouble(double d), double readDouble(), void wrietInt(int I), int readInt() etcvoid wrietInt(int I), int readInt() etc
Υπάρχουν διάφορες άλλες κλάσεις οι οποίες προσφέρουν Υπάρχουν διάφορες άλλες κλάσεις οι οποίες προσφέρουν σεσε συνδυασμό με τις προηγούμενες επί πλέον συνδυασμό με τις προηγούμενες επί πλέον λειτουργικότηταλειτουργικότητα.. OOι κλάσεις ι κλάσεις BufferedInputStream, BufferedInputStream, BufferedOututStreamBufferedOututStream προσφέρουν ενταμιευμένα προσφέρουν ενταμιευμένα Streams Streams από από bytes.bytes.
3
Streams Εισόδου – Εξόδου ( II )
OOι κλάσεις ι κλάσεις FileInputStream, FileOututStreamFileInputStream, FileOututStream δίνουν δίνουν input input και και output stream output stream τα οποία διαβάζουν ήτα οποία διαβάζουν ή γράφουν σε αρχεία. γράφουν σε αρχεία. FileInputStream(File file), FileInputStream(String name)FileInputStream(File file), FileInputStream(String name) OOι κλάσεις ι κλάσεις ZipInputStream, ZipOutputStreamZipInputStream, ZipOutputStream γράφουν και διαβάζουν αρχεία σε γράφουν και διαβάζουν αρχεία σε ZIP compression format.ZIP compression format.
ZipInputStream zin = new ZipInputStream(newZipInputStream zin = new ZipInputStream(new FileInputStream(“x.zip”));FileInputStream(“x.zip”));
DataInputStream din = new DataInputStream(zin);DataInputStream din = new DataInputStream(zin); αν έχει την επιθυμητή τιμή.αν έχει την επιθυμητή τιμή.
PushbackPushbackInputStream pbin = new InputStream pbin = new PushbackPushbackInputStream(new InputStream(new HH κλάση κλάση PushbackInputStream PushbackInputStream εξετάζει το επόμενο εξετάζει το επόμενο bytebyte FileInputStream(“aaa.dat”));FileInputStream(“aaa.dat”));
DataInputStream din = new DataInputStream(pbin);DataInputStream din = new DataInputStream(pbin);
4
InputStream
ByteArrayInputStream
FileInputStream
PipedInputStream
FilterInputStream
SequenceInputStream
BufferInputStream
ObjectInputSteam
BufferedInputStream
CheckedInputStream
DigestInputStream
InflaterInputStream
LineNumberInputStream
PushBackInputStream
DataInputStream ObjectInput
GZIPInputStream
ZipInputSteam
JarInputStream
DataInput
DataOutput
RandomAccessFile
5
OutputStream
ByteArrayOutputStream
FileOutputStream
FilterOutputStream
PipedOutputStream
ObjectOutputStream
BufferedOutputStream
CheckedOutputStream
DigestOutputStream
DeflaterOutputStreamPrintStream
DataOutputStream
ObjectOutput
GZIPOutputStream
ZipOutputSteam
JarOutputStream
DataOutput
DataInput
RandomAccessFile
6
Παράδειγμαtry {try { FileOutputStream file = new FileOutputStream file = new Προσοχή!!!Προσοχή!!! FileOutputStream(“text.txt”); FileOutputStream(“text.txt”); Κάθε κλάσηΚάθε κλάση BufferedOutputStream buff = new BufferedOutputStream buff = new προσθέτειπροσθέτειBufferedOutputStream(file);BufferedOutputStream(file); μεθόδουςμεθόδους DataOutputStream data = new DataOutputStream data = new DataOutputStream(buff);DataOutputStream(buff); for(int i = 0; i < 1000; i++) for(int i = 0; i < 1000; i++)
data.writeInt(i);data.writeInt(i); data.close();data.close();} catch(IOException e) {} catch(IOException e) {
System.out.println(“Error: “ + e.toString());System.out.println(“Error: “ + e.toString());}}
7
Readers και Writers ( I )ΟιΟι κλάσειςκλάσεις Reader Reader και και Writer: Writer: έχουν έχουν abstract abstract μεθόδουςμεθόδους read read και και writewrite που είναι βασισμένες σε 2 που είναι βασισμένες σε 2-byte Unicode -byte Unicode χαρακτήρες χαρακτήρες και όχι σε και όχι σε single-byte single-byte χαρακτήρες. Π.χ. Το χαρακτήρες. Π.χ. Το String String “1234”“1234” σε σε Unicode Unicode γράφεται 00 31 00 32 00 33 00 34 (γράφεται 00 31 00 32 00 33 00 34 (hex), hex), ενώ ενώ σε σε ASCII ASCII γράφεται 31 32 33 34.γράφεται 31 32 33 34. Το πρόβλημα διορθώνουν οι κλάσεις Το πρόβλημα διορθώνουν οι κλάσεις InputStreamReaderInputStreamReader,, OuputStreamWriterOuputStreamWriter οι οποίες μετατρέπουν οι οποίες μετατρέπουν UnicodeUnicode χαρακτήρες σε αναπαράσταση χαρακτήρων τοπικούχαρακτήρες σε αναπαράσταση χαρακτήρων τοπικού λειτουργικού και αντίστροφα.λειτουργικού και αντίστροφα. InputStreamInputStreamReaderReader in = new InputStreamReader(System.in); in = new InputStreamReader(System.in);
8
Readers και Writers ( II )
Οι κλάσεις Οι κλάσεις FileReaderFileReader, FileWriter, FileWriter χρησιμοποιούνται χρησιμοποιούνται γιαγια διάβασμα/γράψιμο σε αρχεία.διάβασμα/γράψιμο σε αρχεία.
FileWriter out = new FileWriter(“outFileWriter out = new FileWriter(“outpput.txt”);ut.txt”);
Ισοδύναμο μεΙσοδύναμο με::
OutputStreamWriter out = new OutputStreamWriter(OutputStreamWriter out = new OutputStreamWriter(
new FileOutputStream(“outnew FileOutputStream(“outpput.txt”));ut.txt”));
FileFileReader in = new FileReader(“input.txt”);Reader in = new FileReader(“input.txt”);
Ισοδύναμο μεΙσοδύναμο με::
InputSteamReader in = new InputStreamReader(new InputSteamReader in = new InputStreamReader(new
FileInputStream(“input.txt”));FileInputStream(“input.txt”));
9
Reader
BufferedReader
CharArrayReader
FilterReader StringReaderPiped
ReaderInputSteamReader
LineNumberReader
PushBackReader FileReader
10
Writer
BufferedWriter
CharArrayWriter FilterWriter StringWriterPipedWriterOutputSteam
Writer
FileWriter
PrintWriter
11
Γράψιμο Text Η κλάση Η κλάση PrintWriterPrintWriter χρησιμοποιείται για γράψιμο χρησιμοποιείται για γράψιμο texttext, δηλ., δηλ. για γράψιμο για γράψιμο strings strings και αριθμών σε και αριθμών σε text formattext format..
PrintWriter out = new PrintWriter(new FileWriter(“outPrintWriter out = new PrintWriter(new FileWriter(“outpput.txt”));ut.txt”));
Ισοδύναμο μεΙσοδύναμο με::
PrintWriter out = new PrintWriter(new FileOutputSteam(“outPrintWriter out = new PrintWriter(new FileOutputSteam(“outpput.txt”));ut.txt”));
out.print(“Hello”);out.print(“Hello”);
double x = 3;double x = 3;
out.print(x);out.print(x);
out.print(‘ ‘);out.print(‘ ‘);
! ! ΥπενθύμισηΥπενθύμιση Για να γράψουμε δεδομένα σε Για να γράψουμε δεδομένα σε binary format binary format χρησιμοποιούμε χρησιμοποιούμε DataOutputStream.DataOutputStream.
12
Διάβασμα Text Δεν υπάρχει στη Δεν υπάρχει στη JavaJava κλάση για διάβασμα ανάλογη κλάση για διάβασμα ανάλογη τουτου DataInputSteam,DataInputSteam, δηλ. που να επιτρέπει να δηλ. που να επιτρέπει να διαβάζονται διαβάζονται datadata σε σε text format. text format. Το πρόβλημα λύνει η Το πρόβλημα λύνει η BufferedInputBufferedInput κλάση, κλάση, η οποία έχει η οποία έχει readLinereadLine()() μέθοδο που διαβάζει γραμμή μέθοδο που διαβάζει γραμμή σε σε text.text. για γράψιμο για γράψιμο strings strings και αριθμών σε και αριθμών σε text formattext format..
BufferedReader inBufferedReader in = new BufferedReader(new = new BufferedReader(new
FileReader(“hello.txt”));FileReader(“hello.txt”));
String line;String line;
while (( line = in.readLine() != null) { ……… }while (( line = in.readLine() != null) { ……… }
BufferedReader in2BufferedReader in2 = new BufferedReader(new = new BufferedReader(new
InputStreamReader(System.in));InputStreamReader(System.in));
13
Η κλάση FileΈνα αντικείμενο Ένα αντικείμενο File File αντιπροσωπεύει ένα αντιπροσωπεύει ένα αρχείο ή ένα φάκελλοαρχείο ή ένα φάκελλο (directory). (directory). Ο κατασκευαστής παίρνει όρισμα το όνομα Ο κατασκευαστής παίρνει όρισμα το όνομα του αρχείου.του αρχείου. File test = new File (“test.txt”); File test = new File (“test.txt”);Η Η java java παρέχει ένα σύνολο μεθόδωνπαρέχει ένα σύνολο μεθόδων::boolean exists(), boolean isDirectory(), boolean isFile(),boolean exists(), boolean isDirectory(), boolean isFile(),
String getName(),String getPath(), boolean mkdir(), boolean canRead(),String getName(),String getPath(), boolean mkdir(), boolean canRead(),
boolean canWrite(), boolean exists(), long length(), boolean delete()…boolean canWrite(), boolean exists(), long length(), boolean delete()…