objektno-orijentisano programiranje iiinasport.pmf.ni.ac.rs/materijali/2811/l03 - tokovi...
TRANSCRIPT
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