Εισαγωγή στ α Streams

13
1 Εισαγωγή στα Streams Υπάρχουν πάνω από 60 κλάσεις για Υπάρχουν πάνω από 60 κλάσεις για input/output input/output στο πακέτο στο πακέτο java.io.*; java.io.*; Ενα αντικείμενο από το οποίο μπορεί να Ενα αντικείμενο από το οποίο μπορεί να διαβαστεί μια ακολουθία διαβαστεί μια ακολουθία bytes bytes λέγεται λέγεται input stream input stream και ένα αντικείμενο και ένα αντικείμενο στο οποίο μπορεί στο οποίο μπορεί να γραφτεί μια ακολουθία να γραφτεί μια ακολουθία bytes bytes λέγεται λέγεται output output stream. stream. Στη Στη java java υπάρχουν κλάσεις υπάρχουν κλάσεις InputStream InputStream και και OutputStream OutputStream για για διάβασμα ή γράψιμο μη χαρακτηρικών δεδομένων διάβασμα ή γράψιμο μη χαρακτηρικών δεδομένων (bytes) (bytes) και και Reader Reader και και Writer Writer κλάσεις για διάβασμα ή κλάσεις για διάβασμα ή γράψιμο χαρακτήρων γράψιμο χαρακτήρων (για (για Unicode Unicode χαρακτήρες χαρακτήρες ) ) . . Οι παραπάνω κλάσεις διαθέτουν Οι παραπάνω κλάσεις διαθέτουν abstract abstract μεθόδους μεθόδους

description

Υπάρχουν πάνω από 60 κλάσεις για input/output στο πακέτο java.io.*; Ενα αντικείμενο από το οποίο μπορεί να διαβαστεί μια ακολουθία bytes λέγεται input stream και ένα αντικείμενο στο οποίο μπορεί να γραφτεί μια ακολουθία bytes λέγεται output stream. - PowerPoint PPT Presentation

Transcript of Εισαγωγή στ α Streams

Page 1: Εισαγωγή  στ α 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)

Page 2: Εισαγωγή  στ α Streams

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.

Page 3: Εισαγωγή  στ α Streams

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);

Page 4: Εισαγωγή  στ α Streams

4

InputStream

ByteArrayInputStream

FileInputStream

PipedInputStream

FilterInputStream

SequenceInputStream

BufferInputStream

ObjectInputSteam

BufferedInputStream

CheckedInputStream

DigestInputStream

InflaterInputStream

LineNumberInputStream

PushBackInputStream

DataInputStream ObjectInput

GZIPInputStream

ZipInputSteam

JarInputStream

DataInput

DataOutput

RandomAccessFile

Page 5: Εισαγωγή  στ α Streams

5

OutputStream

ByteArrayOutputStream

FileOutputStream

FilterOutputStream

PipedOutputStream

ObjectOutputStream

BufferedOutputStream

CheckedOutputStream

DigestOutputStream

DeflaterOutputStreamPrintStream

DataOutputStream

ObjectOutput

GZIPOutputStream

ZipOutputSteam

JarOutputStream

DataOutput

DataInput

RandomAccessFile

Page 6: Εισαγωγή  στ α Streams

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());}}

Page 7: Εισαγωγή  στ α Streams

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);

Page 8: Εισαγωγή  στ α Streams

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”));

Page 9: Εισαγωγή  στ α Streams

9

Reader

BufferedReader

CharArrayReader

FilterReader StringReaderPiped

ReaderInputSteamReader

LineNumberReader

PushBackReader FileReader

Page 10: Εισαγωγή  στ α Streams

10

Writer

BufferedWriter

CharArrayWriter FilterWriter StringWriterPipedWriterOutputSteam

Writer

FileWriter

PrintWriter

Page 11: Εισαγωγή  στ α Streams

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.

Page 12: Εισαγωγή  στ α Streams

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));

Page 13: Εισαγωγή  στ α Streams

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()…