You are on page 1of 18

Lung vo ra

Bi 8 - Lung vo ra

Ni dung
Tng quan v lung vo ra Cc kiu lung vo ra:
Lung byte Lung k t Lung c m Lung d liu Lung i tng

Bi 8 - Lung vo ra

Lung vo ra
Lung vo ra (input/output streams IO streams)
Biu din mt ngun vo v mt ch ra

C nhiu kiu ngun v ch:


tp trn a, thit b, chng trnh, b nh

C nhiu kiu d liu khc nhau:


cc bytes cc kiu d liu n gin cc i tng
3
Bi 8 - Lung vo ra

Lung vo ra
nh ngha tng qut: mi lung l mt chui d liu. Mi chng trnh thng s dng:
Mt lung vo c d liu t mt ngun, mi ln c

mt n v d liu.
Mt lung ra ghi d liu ra mt ch, mi ln ghi mt

n v d liu.
Stream Data source
4
Bi 8 - Lung vo ra

101010111001101 Stream

Program

Lung vo ra
Cc chng trnh s dng lung byte c/ghi cc byte (8 bits). Trong Java, c nhiu lp lung byte. Cc lp ny u phi sinh t hai lp:
InputStream OutputStream

Khi c/ghi d liu byte t/vo tp, ta s dng


FileInputStream FileOutputStream

Bi 8 - Lung vo ra

Lung byte
Vit chng trnh sao chp mt tp, m phng lnh
cp input.txt output.txt (Unix, Linux) copy input.txt output.txt (MS-Dos)

S dng hai lung byte gn vi hai tp:


Mt lung c tp input.txt Mt lung ghi tp output.txt

Vng lp: mi ln c mt byte ca tp input.txt v ghi n vo tp

output.txt. Khi ht tp th hm c tr v -1.


6
Bi 8 - Lung vo ra

Lung byte
public class CopyBytes { public static void main(String[] args) throws IOException { InputStream in = null; OutputStream out = null; try { in = new FileInputStream("input.txt"); out = new FileOutputStream("output.txt"); int c; while ((c = in.read()) != -1) { Ti sao khng c cc khi out.write(c); catch? } } finally { if (in != null) in.close(); if (out != null) out.close(); } Lun phi ng mi lung } d liu khi s dng xong. }
Bi 8 - Lung vo ra

Lung byte
Tuy nhin, lung byte biu din cc thao tc vo/ra mc thp, ta nn trnh

s dng trc tip cc lung ny.


V cc tp input.txt, output.txt cha cc d liu dng k t, cch tt nht l

s dng cc lung k t.
Nu khng nn dng trc tip, ti sao li gii thiu lung byte?

V lung byte l c s xy dng cc kiu lung khc.

Bi 8 - Lung vo ra

Lung k t
Nn tng Java lu cc gi tr k t s dng chun Unicode. Mi lp biu din lung k t u phi sinh t hai lp Reader v Writer.

Khi c/ghi cc tp vn bn (lung k t trong tp), ta s dng cc lp


FileReader FileWriter

Bi 8 - Lung vo ra

Lung k t
public class CopyCharacters { public static void main(String[] args) throws IOException { Reader in = null; Writer out = null; try { in = new FileReader("input.txt"); out = new FileWriter("output.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) in.close(); if (out != null) out.close(); } } }
Bi 8 - Lung vo ra

10

Lung c m
Lung khng m:
Mi lnh c, ghi c thc hin trc tip bi h iu hnh. Chng trnh km hiu qu, do mi lnh u i hi truy xut a, truyn d

liu qua mng hoc cc thao tc tn km khc.


Lung c m hiu qu hn nhiu:
c/ghi d liu t/vo mt vng nh (gi l b m)
Khi no b m y th mi gi cc lnh c/ghi ca h iu hnh

11

Bi 8 - Lung vo ra

Lung c m
Cc lp h tr lung c m: BufferedInputStream, BufferedOutputStream BufferedReader, BufferedWriter Kch hot vic c/ghi b m khi b m cha y: Gi phng thc flush()

chuyn mt lung khng m thnh mt lung c m, ta to mt lung c

m (tng ng):
BufferedReader bufferedReader = new

BufferedReader(new FileReader("input.txt"));
BufferedWriter bufferedWriter = new
12
Bi 8 - Lung vo ra

BufferedWriter(new FileWriter("output.txt"));

Lung d liu
Lung d liu h tr vic c, ghi cc gi tr thuc cc kiu d liu c

s:
boolean, char, byte, short, int, long, float, double String

Mi lung d liu ci t mt trong hai giao din sau:


DataInput, DataOutput

Hai ci t c s dng nhiu l:


DataInputStream, DataOutputStream
Bi 8 - Lung vo ra

13

Lung d liu
V d, gi s ta c 3 bin price, unit v desc ln lt cha cc gi tr thuc cc

kiu double, int v String.


Ghi cc gi tr vo tp:
DataOutputStream out; try { out = new DataOutputStream(new BufferedOutputStream( new FileOutputStream("dataFile.dat"))); out.writeDouble(price); out.writeInt(unit); out.writeUTF(desc); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { Gi cc phng thc tng e.printStackTrace(); ng ca out Bi 8}- Lung vo ra S dng lung c m ghi vo tp dataFile.dat

14

Lung d liu
c d liu t tp v gn gi tr cho cc bin tng ng:
DataInputStream in; try { in = new DataInputStream(new BufferedInputStream( new FileInputStream("dataFile.dat"))); double price = in.readDouble(); int unit = in.readInt(); String desc = in.readUTF(); } catch (FileNotFoundException e) { Gi cc phng thc e.printStackTrace(); tng ng ca in } catch (IOException e) { e.printStackTrace(); }

15

Bi 8 - Lung vo ra

Lung i tng
Lung i tng h tr vic c, ghi cc i tng. Nu i tng thuc mt lp ci t giao din Serializable th ta c th

s dng lung i tng c, ghi i tng .


Hai lp h tr lung i tng: ObjectInputStream, ObjectOutputStream Hai lp ny tng ng ci t cc giao din ObjectInput v ObjectOutput

16

Bi 8 - Lung vo ra

Lung i tng
ObjectInput v ObjectOutput tng ng l cc giao din con ca cc giao din

DataInput v DataOutput.
Chnh v vy, mi phng thc vo, ra i vi cc kiu d liu c s do DataInput,

DataOutput h tr u c ci t trong ObjectInput, ObjectOutput.


ObjectOutput oo = null; try { oo = new ObjectOutputStream(new BufferedOutputStream( new FileOutputStream("dates.dat"))); oo.writeObject(Calendar.getInstance()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
17
Bi 8 - Lung vo ra

Lung i tng
ObjectInput oi = null; try { oi = new ObjectInputStream(new BufferedInputStream( new FileInputStream("dates.dat"))); Calendar date = (Calendar)oi.readObject(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { Phng thc readObject() e.printStackTrace(); lun tr v kiu Object nn } catch (ClassNotFoundException e) { ta phi p thnh kiu thch e.printStackTrace(); hp. }

18

Bi 8 - Lung vo ra

You might also like