objektno-orijentisano programiranje iiinasport.pmf.ni.ac.rs/materijali/2811/l03 - tokovi...

12
Tokovi podataka

Upload: vunhu

Post on 05-Feb-2018

225 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Tokovi podataka

Page 2: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Ulaz – izlaz u Java –i Većina klasa se nalazi u java.io i java.nio.file paketima

Byte streams Character streams Buffered streams Data streams Object streams

Page 3: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

I/O Streams

Input stream Output stream

Page 4: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Binarni tokovi

Primaju i šalju bajtove Nasleđuju InputStream i OutputStream Koriste se za učitavanje i snimanje podataka

kada su u pitanju “sirovi” podaci Ako su podaci specifični (npr. karakteri),

bolje je koristiti druge klase

Page 5: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Primer – kopiranje fajlaFileInputStream in = null;FileOutputStream out = null;try {in = new FileInputStream(“in.txt");out = new FileOutputStream("out.txt");int c;while ((c = in.read()) != -1) {

out.write(c); }

} finally { if (in != null) {

in.close(); } if (out != null) {

out.close();}

}

Page 6: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Tokovi karaktera

Podatke identifikuju kao karaktere Kodiranje karaktera može da se

razlikuje Nasleđuju Reader i Writer klase FileReader i FileWriter

Page 7: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Buffered tokovi

Umesto da direktno upisuju podatke, ovi tokovi ih pamte u memoriji.

Skupe operacije kao što je pristup disku se izvršavaju mnogo ređe nego inače.

Bafer se obično prazni kada se napuni, ali je ponekad potrebno eksplicitno ga isprazniti flush()

Page 8: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Data tokovi

Koriste se za rad sa primitivnim tipovima i stringovima

DataInputStream i DataOutputStream Pri čitanju i upisu se mora voditi računa

o redosledu podataka

Page 9: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Data tokovistatic final String dataFile = "invoicedata";

static final double[] prices =

{ 19.99, 9.99, 15.99, 3.99, 4.99 };

static final int[] units = { 12, 8, 13, 29, 50 };

static final String[] descs = {

"Java T-shirt",

"Java Mug",

"Duke Juggling Dolls",

"Java Pin",

"Java Key Chain"

};

Page 10: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Data tokoviout = new DataOutputStream(

new BufferedOutputStream(

new FileOutputStream(dataFile)));

for (int i = 0; i < prices.length; i ++) {

out.writeDouble(prices[i]);

out.writeInt(units[i]);

out.writeUTF(descs[i]);

}

Page 11: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Data tokoviin = new DataInputStream(new BufferedInputStream(newFileInputStream(dataFile)));

try {

while (true) {

price = in.readDouble();

unit = in.readInt();

desc = in.readUTF();

System.out.format("%d, %s, $%.2f%n", unit, desc, price);

total += unit * price;

}

} catch (EOFException e) {}

Page 12: Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi podataka.pdf · Binarni tokovi Primaju i šalju bajtove Nasleđuju InputStreami OutputStream

Tokovi objekata

Koriste se za serijalizaciju objekata ObjectOutputStream i ObjectInputStream

Metodi writeObject() i readObject() Objekat koji se serijalizuje mora da

implementira Serializable interfejs Bolje je implementirati interfejs Externalizable koji omogućava bolju kontrolu serijalizacije