
6/29/2011
1
CHNG 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* lý 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

