6/29/2011
1
CHNG 2
VN  I/O TRONG .NET
ThS. Trn Bá Nhim
Website:
sites.google.com/site/tranbanhiem
Email: tranbanhiem@gmail.com
Ni dung
Gii thiu
Streams
Streams cho tp tin
Encoding data
Stream cho d liu nh phân và text
Serialization
Xut mt cơ s d liu dùng stream
6/29/2011 Chương 2: I/O trong .NET 2
6/29/2011
2
Gii thiu
I/O là vn  rt quan trng i vi truyn
thông trên mng
Chương này s kho sát các hot ng
I/O bên dưi
Kho sát vn  stream  phc v cho
vic chuyn i các i tưng phc tp
sang stream
6/29/2011 Chương 2: I/O trong .NET 3
Streams
Kin trúc da trên stream ã ưc phát
trin trong .NET
Các thit b I/O bao gm t máy tin, !a
cng cho n card mng
Không phi các thit b u có chc n"ng
ging nhau stream c#ng không h$ tr
các phương thc ging nhau
canRead(), canSeek(), canWrite() ch% kh
n"ng stream ng vi thit b c th
6/29/2011 Chương 2: I/O trong .NET 4
6/29/2011
3
Streams
Hai stream quan trng: networkStream và
fileStream
Hai cách dùng stream: ng b và bt ng
b
Khi dùng ng b: lung (thread) tương ng
s tm ngưng n khi tác v hoàn thành
ho&c l$i
Khi dùng không ng b: lung (thread)
tương ng s ngay tc thì quay v phương
thc gi nó và bt c lúc nào tác v hoàn
thành s có du hiu ch% th, ho&c l$i xy ra
6/29/2011 Chương 2: I/O trong .NET 5
Streams
Kiu chương trình “treo”  ch' tác v hoàn
thành không “thân thin” cho l(m, do ó
phương thc gi ng b phi dùng mt
lung riêng
B)ng cách dùng các lung và phương thc
gi ng b làm cho có cm giác máy tính có
th làm ưc nhiu vic cùng lúc. Thc t,
hu ht máy tính ch% có 1 CPU, nên iu trên
t ưc là do chuyn gia các tác v trong
khong mt vài milliseconds
6/29/2011 Chương 2: I/O trong .NET 6
6/29/2011
4
Streams cho các file
Khi to mt ng dng .NET mi, thêm
vào:
Mt form
Mt File Open Dialog control vi tên
openFileDialog
Mt textbox vi tên tbResults, lp thuc tính
multiline=true.
Hai buttons vi tên btnReadAsync và
btnReadSync
6/29/2011 Chương 2: I/O trong .NET 7
Streams cho các file
S* dng namespace: using System.IO;
Khai báo:
FileStream fs;
byte[] fileContents;
AsyncCallback callback;
delegate void InfoMessageDel(String info);
Khai báo thêm phương thc InfoMessageDel
 tránh vn  tranh chp bi các thread tham
chiu n mt i tưng trong lp trình mng
6/29/2011 Chương 2: I/O trong .NET 8
6/29/2011
5
Streams cho các file
Thêm code x* bin c Click c+a i tưng btnReadAsync:
private void btnReadAsync_Click(object sender, EventArgs e)
{
openFileDialog.ShowDialog();
callback = new AsyncCallback(fs_StateChanged);
fs = new FileStream(openFileDialog.FileName,
FileMode.Open,
FileAccess.Read, FileShare.Read, 4096, true);
fileContents = new Byte[fs.Length];
fs.BeginRead(fileContents, 0, (int)fs.Length, callback,
null);
}
Chú ý: c 4096 byte/ln là cách hiu qu nht
6/29/2011 Chương 2: I/O trong .NET 9
Streams cho các file
Ni dung hàm fs_StateChanged:
private void fs_StateChanged(IAsyncResult asyncResult)
{
if (asyncResult.IsCompleted)
{
string s = Encoding.UTF8.GetString
(fileContents);
InfoMessage(s);
fs.Close();
}
}
6/29/2011 Chương 2: I/O trong .NET 10