Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi...

Post on 05-Feb-2018

226 views 2 download

Transcript of Objektno-orijentisano programiranje IIInasport.pmf.ni.ac.rs/materijali/2811/L03 - Tokovi...

Tokovi podataka

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

I/O Streams

Input stream Output stream

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

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

}

Tokovi karaktera

Podatke identifikuju kao karaktere Kodiranje karaktera može da se

razlikuje Nasleđuju Reader i Writer klase FileReader i FileWriter

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

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

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"

};

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

}

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) {}

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