- 17 - C:\MyJava\Baitap>java ThrowDemo -1 ArraySizeException: Nhap kich thuoc mang khong hop le Gi i thích: NegativeArraySizeException... try catch finally demo Khong the chia 0!. Ví d :
Trang 2- 2 -
M C L C
Ch ng 1: CÁC KHÁI NI M C N B N V M NG VÀ JAVA
I CÁC KHÁI NI M C N B N V M NG
II L CH S PHÁT TRI N C A JAVA
ch đ n thu n là m t ngôn ng l p trình mà nó là gi i pháp cho nhi u v n đ
III C U TRÚC C A MÁY O JAVA
IV CÁC C TR NG C A NGÔN NG L P TRÌNH JAVA
V CÁC N B N JAVA
VII CÁC KI U NG D NG TRONG JAVA
Ch ng 2 NGÔN NG L P TRÌNH JAVA
I NH DANH, KI U D LI U VÀ KHAI BÁO BI N
II C U TRÚC L NH TRONG JAVA
III QU N LÝ NGO I L
IV CÁC L P VÀ CÁC I T NG TRONG JAVA
V CÁC LU NG VÀO RA
VI L P TRÌNH TUY N O N TRONG JAVA
Ch ng 3 L P TRÌNH M NG B NG JAVA
I X LÝ A CH IP
II CÁC L P URL VÀ URLConnection
III L P TRÌNH SOCKET
VI L P TRÌNH APPLET
V L P TRÌNH C S D LI U
VI L P TRÌNH SOCKET TIÊN TI N
TÀI LI U THAM KH O CHÍNH
Trang 3Ki n trúc m ng c p t i hai khía c nh là Hình tr ng m ng và Giao th c m ng
Hình tr ng m ng: Là cách n i các máy tính v i nhau Ng i ta phân lo i m ng theo hình tr ng m ng
nh m ng sao, m ng bus, m ng ring…
Giao th c m ng: Là t p h p các qui t c qui c truy n thông c a m ng mà t t c các th c th tham gia truy n thông ph i tuân theo
Giao th c TCP/IP
IP (Internet Protocol)-Giao th c cung c p kh n ng k t n i các m ng con thành liên m ng
TCP Là giao th c h ng liên k t (connection oriented) b t bu c ph i có giai đo n thi t l p và gi i phóng liên k t
Host Máy tính đ c k t n i v i Internet đ c g i là host
a ch IP: M i host đ c đ nh danh duy nh t trên m ng và đ nh danh này đ c g i là đ a ch Internet hay đ a ch IP
Ví d Máy tính có hostname là www.microsoft.com có đ a ch IP là 207.46.230.219
Máy ch DNS
Ti n thân c a m ng Internet là m ng Arpanet c a B qu c phòng M Th i k đó s máy tính m c
đ đ li t kê chúng trong m t t p tin v n b n và l u trên t ng máy k t n i vào m ng Thông tin trong
t p tin này bao g m đ a ch IP và hostname Tuy nhiên do quy mô c a m ng ngày càng m r ng
ng i ta c n có các máy tính chuyên d ng đ l u tr và phân gi i tên mi n Các máy tính có ch c
n ng nh v y đ c g i là Máy ch DNS
D ch v tên mi n (Domain Name Service) Là t p h p nhi u máy tính đ c liên k t v i nhau và phân
b r ng trên m ng Internet Các máy tính này đ c g i là name server Chúng cung c p cho ng i dùng tên, đ a ch IP c a b t k máy tính nào n i vào m ng Internet ho c tìm ra nh ng name server có
kh n ng cung c p thông tin này
C ch truy tìm đ a ch IP thông qua d ch v DNS
Gi s trình duy t c n tìm t p tin hay trang Web c a m t máy ch nào đó, khi đó c ch truy tìm đ a
ch s di n ra nh sau:
1 Trình duy t yêu c u h đi u hành trên client chuy n hostname thành đ a ch IP
2 Client truy tìm xem hostname có đ c ánh x trong t p tin localhost, hosts hay không?
-N u có client chuy n đ i hostname thành đ a ch IP và g i v cho trình duy t
-N u không client s tìm cách liên l c v i máy ch DNS
3 N u tìm th y đ a ch IP c a hostname máy ch DNS s g i đ a ch IP cho client
4 Client g i đ a ch IP cho trình duy t
5 Trình duy t s d ng đ a ch IP đ liên l c v i Server
6 Quá trình k t n i thành công Máy ch g i thông tin cho client
Trang 4- 4 -
C ng (Port)
Khi k t n i vào máy ch ta có th yêu c u nhi u d ch v khác nhau M i d ch v đ u có cách g i và
nh n d li u theo qui c riêng TCP/UDP ch ch u trách nhi m g i d li u t máy tính này t i máy tính khác Vi c g i d li u cho d ch v nào thì thông qua c ng (port)
M i máy tính v i m t đ a ch IP có 65535 c ng M i c ng đ c dành cho m t d ch v đ c bi t Ch ng
h n d ch v Web đ c ch y trên c ng 80
Socket
Socket là m t ph ng pháp đ thi t l p k t n i truy n thông gi a m t ch ng trình yêu c u d ch v
và m t ch ng trình cung c p d ch v trên m ng LAN, WAN, hay Internet và đôi khi là gi a các ti n trình trong cùng m t máy tính Thông tin c a m t Socket bao g m đ a ch IP và s hi u c ng
URL (Uniform Resource Locator) là m t con tr ch t i m t tài nguyên c th trên Internet v trí xác
đ nh
Cú pháp c a URL: protocol://hostname [:80]/path/filename#section
Ví d : http://www.sun.com/index.html
II L CH S PHÁT TRI N C A JAVA
L ch s phát tri n c a Java b t đ u n m 1991 khi SUN ti n hành các d án l p trình cho vi x lý dùng trong các thi t b đi n t khác nhau C++
không đáp ng đ c các yêu c u này vì C++
ch tính kh chuy n v mã ngu n nh ng sau khi biên d ch l i hoàn toàn ph thu c vào t ng b vi x lý c th Vi
x lý dùng trong các thi t b đi n t r t đa d ng và có vòng đ i khá ng n ng i Vi c thay đ i b x lý
d n đ n c n ph i thay đ i trình biên d ch C++
, đi u này gây lên t n kém SUN đã thi t k m t ngôn
ng l p trình m i có tính kh chuy n cao h n đó chính là Java Java là tên đ a ph ng n i xu t x
c a m t lo i cà phê ngon n i ti ng
Java đ c chính th c công b n m 1995 và ngay l p t c đã t o lên m t trào l u m i trên toàn th gi i và t đó đ n nay v n t o đ c s c cu n hút m nh m B i vì Java không ch đ n thu n
là m t ngôn ng l p trình mà nó là gi i pháp cho nhi u v n đ
III C U TRÚC C A MÁY O JAVA
Ch ng trình ng d ng ho t đ ng b ng cách s d ng các đ i t ng c a Java (Java Object) Máy o Java t o thành m t l p ng n cách gi a trình ng d ng và h đi u hành
C u trúc c a máy o Java (Java Virtual Machine)
Máy o Java bao g m các thành ph n sau : Trình n p l p (Class Loader), Trình ki m tra l p (Class Verifier), và Trình th c thi (Execution Unit)
Trình n p l p: đ c bytecode t đ a ho c t k t n i m ng
Trình ki m tra l p: (Class Verifier) Ki m tra các l p s không sinh ra các l i nh h ng t i h th ng khi th c thi
Trình th c thi s th c hi n các l nh đ c quy đ nh trong t ng bytecode
IV CÁC C TR NG C A NGÔN NG L P TRÌNH JAVA
Java là m t môi tr ng đ c l p (Independent Platform)
Do c u trúc c a Java nên ta có th so n th o ch ng trình trên b t k h th ng nào Sau khi đã đ c biên d ch thành t p tin l p (*.class) ng d ng có th th c thi b t k h th ng nào ó là đ c tính mà các ngôn ng khác không có
Java là m t ngôn ng l p trình h ng đ i t ng
Java là m t ngôn ng l p trình h ng đ i t ng thu n túy, m i th trong Java đ u là đ i t ng
Trang 5- 5 -
Java là m t ngôn ng kh chuy n (Portibility)
Java có tính kh chuy n đ i v i c mã ngu n và b n thân mã biên d ch (bytecode)
Java là môi tr ng x lý phân tán
Bytecode không ph thu c vào h th ng vì v y bytecode có th n m phân tán trên m ng Vi c liên k t
v i th vi n ch đ c th c hi n vào lúc ch y ch ng trình do v y mã byte th ng g n nh Ch ng trình Java đ c n p d n m t cách linh ho t nên không gây quá t i cho m ng Ngoài ra, Java còn cho phép x lý đa tuy n đo n C ch truy n thông đi p thu n ti n cho vi c t ch c m ng
Java là môi tr ng an toàn
Khi phát tri n các ng d ng phân tán thì m t trong nh ng v n đ đ c quan tâm hàng đ u là an toàn
h th ng Java đ c thi t k đ đ m b o an toàn cho ng i dùng Java trên m ng Java có b n t ng
b o an:
T ng 1: M c ngôn ng và trình biên d ch Java không có ki u con tr Trình biên d ch ki m tra ki u r t
ch t ch M i chuy n đ i ki u đ u ph i đ c th c hi n m t cách t ng minh Trình biên d ch Java t
ch i sinh ra mã byte n u mã ngu n không tuân th nghiêm ng t các quy t c an toàn
T ng 2: Trình n p l p (Class Loader) Có kh n ng phân bi t nh ng l p đ n t m ng và nh ng l p
n p t h th ng Nh kh n ng phân bi t nh v y l p đ c n p qua m ng đ c kh ng ch ch t ch , không đ c phép th c hi n các thao tác m c th p
T ng 3: Trình ki m tra mã byte Trình này s ki m tra mã byte vào lúc ch y ch ng trình b o đ m
ch ng trình Java đã đ c biên d ch m t cách đúng đ n Khi th c hi n s không gây l i nh h ng
t i h th ng c ng nh không đ ng ch m t i d li u riêng t trên máy khách
T ng 4: Trình b o an Ki m tra mã byte vào lúc ch y nh m b o đ m mã đang xét không vi ph m qui
t c an toàn đã đ c thi t l p Các thao tác c a ng d ng đ c li t vào kh n ng gây nguy hi m nh
đ c, xóa t p đ u ph i đ c Trình b o an cho phép
Java cung c p cho ng i l p trình m t th vi n kh ng l
Java cung c p cho ng i l p trình m t th vi n kh ng l các hàm chu n, g i là core API Các hàm chu n này đ c đ t trong các gói
Java đã lo i b gánh n ng này cho ng i l p trình Các vùng nh đ c t đ ng gi i phóng n u nh
nó không tham chi u đ n b t k đ i t ng nào đang ho t đ ng
Chi phí phát tri n ng d ng b ng Java th p
Khi phát tri n ng d ng d a trên công ngh Java thì s có r t nhi u công c phát tri n và d ch v
đ c cung c p mi n phí
V CÁC N B N JAVA
J2SE ( Java 2 Platform, Second Edition)
ây là n b n chu n, bao g m m t môi tr ng th i gian ch y và m t t p h p các API đ xây d ng
m t lo t các ng d ng khác nhau t applet, cho t i các ng d ng đ c l p ch y trên các n n khác nhau, ng d ng cho client cho các ng d ng doanh nghi p khác nhau
J2EE (Java 2 Platform, Enterprise Edition (J2EE)
J2EE là n n t ng đ xây d ng các ng d ng phía server
J2ME (Java 2 Platform, Micro Edition )
Trang 6- 6 -
n b n này cho phép xây d ng các ng d ng Java cho các “vi thi t b ” (các thi t b có màn hình hi n
th và h tr b nh t i thi u, nh đi n tho i di đ ngm và các thi t b tr giúp cá nhân)
VI CÔNG C JAVA
Sun cung c p m t s ti n ích cho phép biên d ch b t l i và t o tài li u cho m t ng d ng Java JDK bao g m:
Javac: B biên d ch đ chuy n mã ngu n thành bytecode
Java: B thông d ch đ th c thi các ng d ng Java tr c ti p t t p tin l p
Apppletviewer: Th c thi Java Applet t tài li u html
VII CÁC KI U NG D NG TRONG JAVA
Trang 7Qui t c cho đ nh danh:
• nh danh là m t dãy các ký t g m các ch cái, ch s và các ký t khác: ‘_’, $,
• nh danh không b t đ u b ng ch s
• dài c a đ nh danh không gi i h n
• Java phân bi t ch hoa và ch th ng
Qui c đ t tên
• nh danh cho các l p: ch cái đ u c a m i t trong đ nh danh đ u vi t hoa
Ví d : MyClass, HocSinh, SocketServer, URLConnection,
• nh danh cho các bi n, ph ng th c, đ i t ng: ch cái đ u c a m i t trong đ nh danh đ u vi t hoa tr t đ u tiên
Ví d : hoTen (h tên), namSinh (n m sinh), tinhTong (tính t ng)
Trang 8• Các bi n tham chi u đ i t ng (Object Reference) là bi n đ c s d ng đ x lý các
đ i t ng
• Các bi n t nh (static variable) là bi n c a l p đ i di n cho c l p
• Các bi n c c b : là bi n đ c khai báo trong các ph ng th c và trong các kh i
Trang 9Bi u th c đi u ki n A?B:C tr v giá tr B n u A có giá tr true, tr v giá tr C n u A có giá tr false
̇ Các l nh đi u khi n dòng th c hi n trong Java
Trang 10Có th <Thân_chu_trình> không đ c th c hi n l n nào n u ngay t đ u
< i u_ki n> có giá tr false
< i u_ki n> là bi u th c boolean
Trang 11} while(< i u_ki n>);
while(< i u_ki n_l p>) {
Trang 13t ng hay d li u mà nó thao tác (nh file hay đ a ch m ng) xác đ nh nó vi ph m các qui t c c b n (nh đ c d li u t m t lu ng đã b đóng), R t nhi u ng i l p trình không th ki m tra t t c các
tr ng thái l i có th x y ra
Exception cung c p m t cách đ ki m tra các l i mà không chia c t mã Exception c ng đ a ra m t
c ch báo l i m t cách tr c ti p ch không s d ng các c ch báo l i tr c ti p ch không s d ng các c hay các hi u ng ph
Các ngo i l trong Java
Trong Java có m t l p Exception, m i l p ngo i l là l p con c a l p này L p Exception là l p con
c a l p Throwable
L p Throwable ch a m t xâu đ c s d ng đ mô t ngo i l Ngo i l đ c phân thành hai lo i: Ngo i l đ c ki m tra (checked exception) và ngo i l không đ c ki m tra (unchecked exception) Ngo i l đ c ki m tra là ngo i l mà trình biên d ch s ki m tra ph ng th c c a ng i l p trình ch
đ a ra ngo i l khi chúng đ c thông báo đ đ a ra
Ngo i l không đ c ki m tra là l p con c a các l p Error; RuntimeException
Java cung c p m t mô hình qu n lý các ngo i l cho phép ki m tra các l i các v trí có liên quan try và catch
Trang 14catch(Exception e) {
} Khi các kh i try đ c l ng nhau, kh i try bên trong đ c x lý tr c và m t ngo i l đ c đ a ra trong kh i đó đ c đón b t trong các kh i try catch con N u kh i catch bên trong không th a mãn thì các kh i try bên ngoài đ c ki m tra N u m t kh i catch phù h p đ c tìm th y, thì ngo i l đ c
qu n lý trong kh i đó ng c l i thì môi tr ng Java Runtime qu n lý ngo i l
Trang 15Kh i finally là kh i mà chúng ta th y các l nh tr v các tài nguyên cho h th ng và các l nh khác
đ in ra b t k thông báo nào
Trang 16- 16 -
M nh đ throw
Các ngo i l đ c đ a ra b ng cách s d ng l nh throw, nó nh n m t đ i t ng làm tham s , đ i
t ng thu c l p là l p con c a l p Throwable
Trang 17- 17 -
C:\MyJava\Baitap>java ThrowDemo -1
ArraySizeException: Nhap kich thuoc mang khong hop le
Gi i thích:
NegativeArraySizeException B ng cách t o ra m t đ i t ng c a l p này, chúng ta đã in ra thông báo ngo i l Ph ng th c checkSize() có th đ a ra ngo i l ArraySizeException
Trang 18try catch finally demo
Khong the chia 0!
IV CÁC L P VÀ CÁC I T NG TRONG JAVA
n v c b n trong l p trình Java là l p Các l p bao g m các ph ng th c Các l p bao
g m các ph ng th c th c hi n công vi c tính toán Các l p c ng đ a ra c u trúc c a đ i t ng,
c ng v i c ch t o ra đ i t ng t các đ nh ngh a l p B n có th ch tính toán v i các ki u nguyên
Trang 19[<Ph m vi ho c thu c tính ki m soát truy nh p>]<Ki u tr v ><Tên ph ng th c>
([<Danh sách tham bi n hình th c>])[<M nh đ throws>]
{
<N i dung ph ng th c>
}
Trong đó
<Ki u tr v > có th là ki u nguyên th y, ki u l p ho c không có giá tr tr l i (ki u void)
<Danh sách tham bi n hình th c> bao g m dãy các tham bi n (ki u và tên) phân cách v i nhau b i
d u ph y
Các ki u ph m vi hay ki m soát truy c p
̇ public: Các thành ph n đ c khai báo là public có th đ c truy c p b t k n i nào có th
truy c p đ c, và chúng đ c th a k b i các l p con c a nó
ki u_d _li u1 bi n1
ki u_d _li u2 bi n2
Trang 20- 20 -
̇ private: Các thành ph n đ c khai báo là private ch có th đ c truy c p trong chính l p đó
̇ protected: Các thành ph n đ c khai báo là protected có th đ c truy c p b i và th a k
b i các l p con, và có th truy xu t b i mã l nh c a cùng gói đó
Constructor
Constructor là m t ph ng th c đ c bi t không có giá tr tr v và có tên trùng v i tên l p
Tr ng h p không có constructor nào đ c đ a ra trình biên d ch cung c p constructor m c đ nh cho
t ng M t s l p có các tr ng public đ ng i l p trình có th thao tác tr c ti p, nh ng trong h u
h t các tr ng h p đi u này không ph i là m t ý t ng t t
Các giá tr tham s
T t c các tham s đ i v i các ph ng th c Java là “g i theo tr ” Ngh a là, các giá tr c a các
bi n tham s trong m t ph ng th c là các b n sao c a các giá tr do ng i g i xác đ nh
Truoc khi goi ham:one=1.0
Sau khi chia:x=0.5
Sau loi goi ham chia:one =1.0
Truy n các tham chi u trong m ng
Trang 21- 21 -
M ng trong Java đ c xem là đ i t ng Các ph n t c a m ng có th có ki u nguyên th y
ho c ki u tham chi u (ki u l p)
Ví d : L c ra ph n t l n nh t c a m t m ng và đ a v cu i m ng
C:\MyJava\Baitap>java Loc
8 1 4 3 2 5
1 4 3 2 5 8
Vì trong Java các l i g i hàm đ u th c hi n theo tham tr (call – by – value) v i ki u nguyên
th y và tham chi u đ i v i ki u l p nên hàm doiCho() thay đ i đ c các ph n t c a day
Các tham bi n final
Tham bi n hình th c có th đ c khai báo v i t khóa final đ ng tr c Tham bi n final là tham bi n không đ c kh i t o giá tr cho đ n khi nó đ c gán m t tr nào đó và khi đã đ c gán tr thì không th thay đ i giá tr đó đ c
double tien = banh.tinh(10,giaBan);
System.out.println("Gia ban: "+giaBan);
System.out.println("Tien ban duoc: "+tien);
Trang 22Tong cua day so la 102.0
Phân lo i ph ng th c theo tính đa hình
̇ Các ph ng th c n p ch ng (overloaded method)
̇ Các ph ng th c n p ch ng là các ph ng th c n m trong cùng m t l p có cùng tên nh ng khác nhau v danh sách tham s
Các ph ng th c n p ch ng là m t d ng c a tính đa hình th i gian biên d ch
Trang 23Phep cong hai so nguyen :30
Phep cong hai so dau phay dong :75.65
Phep cong hai xau :Good Morning
Gi i thích: Trong ch ng trình trên ph ng th c add() là ph ng th c đ c n p ch ng Có ba
ph ng th c có cùng tên add() nh ng có các tham s khác nhau Khi chúng ta g i ph ng th c add()…????
V CÁC LU NG VÀO RA
Khi l p b t k ch ng trình nào trong m t ngôn ng nào thì v n đ vào ra d li u gi a
ch ng trình và ngu n d li u c ng nh đích d li u là v n đ mà ng i l p trình c n ph i quan tâm Làm th nào đ ta có th truy n d li u cho m t ch ng trình Java Có hai cách hi u qu đ th c
hi n đi u này:
̇ Thông qua m t tài nguyên tu n t nào đó nh file ho c qua m t máy tính khác
̇ Thông qua giao di n ng i máy
M c đích c a ch ng này là xem xét cách truy n d li u cho m t ch ng trình thông qua m t máy tính khác hay t p tin
Khái ni m lu ng(stream)
Theo ngh a đen lu ng là m t đ ng ng n c
V m t thu t ng chuyên nghành ta có th hi u “Các lu ng là các dãy d li u có s p th t ”
Xét trên quan đi m c a ch ng trình và ngu n d li u (Data Soure) ta có th phân lo i lu ng thành hai lo i: Lu ng xu t (output stream) và lu ng nh p (input stream) tr c quan h n chúng ta xem hình v d i đây:
Program Data Source
InputStream
OutputStream
Trang 24- 24 -
Nh v y n u chúng ta c n l y d li u t ngu n vào ch ng trình thì c n ph i s d ng lu ng
nh p Ng c l i, n u ta c n ghi d li u t ch ng trình ra ngu n d li u thì ta c n ph i s d ng
lu ng xu t
Vai trò c a các lu ng trong ch ng trình Java
̇ Các lu ng là các đ ng ng đ g i và nh n thông tin (ghi và đ c m t lu ng)
̇ Các lu ng che d u các chi ti t ho t đ ng bên trong c a h đi u hành, trong khi v n cho phép truy c p các tài nguyên h th ng thông qua các t p tin
Lu ng xu t và lu ng nh p chu n
Trong l p java.lang.System có lu ng nh p chu n và lu ng xu t chu n
̇ System.out: Lu ng xu t chu n th ng đ c s d ng đ hi n th k t qu đ u ra trên màn hình
̇ System.in: Lu ng nh p chu n th ng đ n t bàn phím và đ c s d ng đ hi n các ký t
̇ System.err: Lu ng l i chu n
Lu ng xu t và nh p thu c gói java.io
Gói java.io: đ nh ngh a các l p tr u t ng cho các lu ng nh p và xu t c b n
Ngu n d li u (Data Source)
Ngu n d li uh là n i xu t phát c a d li u có th là máy tính c c b , máy tính xa, hay c
̇ public abstract int read() throws IOException
c m t byte d li u và tr v byte đã đ c đ c Giá tr tr v là –1 khi k t thúc lu ng
̇ public int read(byte[] b) throws IOException
̇ public int read(byte[] b, int off, int len) throws IOException
̇ public long skip(long count) throws IOException
̇ public void close() throws IOException
L p OutputStream
L p tr u t ng OutputStream khai báo các ph ng th c đ ghi d li u vào đích
̇ public abstract void write(int b)throws IOException
̇ public void write(byte[] b)throws IOException
̇ public void write(byte[] b, int off, int len) throws IOException
̇ public void close()
̇ public void flush()
Các lu ng xu t nh p khác đ c th a k t các lu ng tr u t ng InputStream và OutputStream i
v i m i ki u d li u và ngu n d li u chúng ta có th có các ki u lu ng xu t và nh p riêng, ch ng h n
Trang 25Ví d :
Vi t ch ng trình t o l p m t lu ng xu t m ng (ByteArrayOutputStream) 100 byte Ghi vào lu ng xu t
m ng 100 ph n t t 0 đ n 99 d li u t lu ng xu t m ng vào m ng b In d li u t m ng b ra màn hình
Trang 26byte[] b = new byte[100];
} }
v n t n t i trong m ng
Lu ng xu t nh p t p tin
Trang 27- 27 -
i v i lu ng xu t nh p t p tin ta hình dung nh sau: ch ng trình Java là n i tiêu th d
li u, t p tin là n i cung c p d li u
̇ đ c d li u t t p tin vào b nh ta s d ng lu ng nh p t p tin FileInputStream
̇ ghi d li u t b nh vào t p tin ta s d ng lu ng xu t t p tin FileOutputStream
OutputStream os = new FileOutputStream(args[0]);
String s = "Thu nghiem voi luong xuat nhap tap tin";
for(int i=0;i<s.length();i++) os.write(s.charAt(i));
os.close();
InputStream is = new FileInputStream(args[0]);
int len = is.available();
System.out.println("Luong nhap co "+len+ " bytes");
byte b[] = new byte[len];
int sobyte = is.read(b,0,len);
System.out.println(sobyte+ " la so bytes da doc");
FileOutputStream
Trang 28- 28 -
}
K t qu th c hi n ch ng trình
C:\MyJava\Baitap>java FileIOExam abc.txt
Luong nhap co 38 bytes
̇ RandomAccessFile(String name, String mode) throws IOException
̇ RandomAccessFile(File file, String mode) throws IOException
̇ long getFilePointer() throws IOException : Tr v v trí c a con tr t p
̇ long length() throws IOException: cho bi t s byte hay đ dài c a t p
̇ void seek(long offset) throws IOException: Chuy n con tr t p đi offset v trí k t đ u t p
̇ void close() throws IOException: Khi không c n truy nh p t p n a thì đóng l i
Ví d :
import java.io.*;
public class RandomAccessDemo
{
static String filename="dayso.dat";
final static int INT_SIZE=4;
//Tao file de ghi
public void createFile() throws IOException
{
File datFile = new File(filename);
RandomAccessFile out_file = new RandomAccessFile(datFile,"rw");
for(int i=0;i<10;i++)out_file.writeInt(i*i);
out_file.close();
}
//Mo file de doc
public void readFile() throws IOException
Trang 29- 29 -
{
File datFile = new File(filename);
RandomAccessFile inp_file= new RandomAccessFile(datFile,"r");
System.out.println("Cac so doc tu file:");
long len = inp_file.length();
//Mo file de ghi
public void extendFile() throws IOException
{
RandomAccessFile out_file = new RandomAccessFile(filename,"rw");
for(int i=10;i<20;i++) out_file.writeInt(i*i);
Trang 30- 30 -
Ti n trình
Ti n trình (process) là tr ng thái t c th i c a m t ch ng trình đang ch y trên máy tính
M c đích c a ti n trình và tuy n đo n là cho phép nhi u máy tính th c hi n nhi u tác v đ ng th i
Ví d
A là m t tài kho n t i ngân hàng, có các tác v là:
• getBalance(): l y ra giá tr c a tài kho n
• setBalance(): chép l i giá tr vào b n ghi tài kho n
Tuy n đo n
Khi m t h đi u hành hi n đ i mu n kh i đ ng m t ch ng trình, nó t o ra m t ti n trình m i
M t ti n trình là m t ch ng trình mà hi n đang đ c x lý M i ti n trình có ít nh t m t ti n đo n đang ch y bên trong nó ôi khi các tuy n đo n đ c xem nh là các ti n trình
Xét ví d tuy n đo n d i đây
Mô hình l p trình đ n tuy n đo n th ng g p nhi u ngôn ng l p trình
Trong m t ngân hàng th c t , có nhi u tuy n đo n cùng ho t đ ng đ ng th i
Có nhi u teller đang c p nh t tài kho n c a ngân hàng
Trang 31- 31 -
Tình hu ng có nhi u tuy n đo n cùng truy c p t i m t đ i t ng
a tuy n đo n(Multi-thread)
M t ng d ng có th có nhi u tuy n đo n Kh n ng làm vi c v i nhi u tuy n đo n đ c g i
là đa tuy n đo n a tuy n đo n cho phép b n vi t các ch ng trình hi u qu t n d ng t i đa CPU,
b ng cách duy trì th i gian tr là t i thi u
T i cùng m t th i đi m có hai khách hàng cùng ghi có vào cùng m t tài kho n N u th c hi n
nh v y thì ch có tuy n đo n th hai m i th c s nh h ng t i tài kho n, k t qu c a giao d ch th
nh t s b m t kh c ph c đi u này c n có m t c ch đ thông báo m t đ i t ng đang đ c s
d ng hay không
Các cách cài đ t tuy n đo n
Có hai cách l p trình tuy n đo n trong Java
Cách 2: Th c thi giao di n Runnable
class C2() implements Runnable {
public C2(){Thread t = new Thread(this);}
public void run(){ }
}
t o m t tuy n đo n đi u khi n b t đ u b ng cách t o m t đ i t ng Thread
Thread worker = new Thread();
l p trình tuy n đo n ta ph i s d ng gói java.lang, tuy nhiên do gói ngày đ c m c đ nh nên ta không c n ph i khai báo
Trang 32- 32 -
M t s ph ng th c c b n khi l p trình tuy n đo n
sleep(): làm ch m di n ti n c a ch ng trình
start(): kh i đ ng m t tuy n đo n
init(): kh i t o m t tuy n đo n
stop(): h y m t tuy n đo n
run(): th c hi n nhi m v c a tuy n đo n
suspend(): ng ng ho t đ ng c a tuy n đo n
resume():kích ho t tuy n đo n ti p t c ho t đ ng
Chú ý:
So sánh ph ng th c stop() c a Applet và ph ng th c stop() c a tuy n đo n
̇ Ph ng th c stop() c a Applet ch t m ng ng ho t đ ng c a ng d ng ký sinh
̇ Ph ng th c stop() c a tuy n đo n:Sau khi g i ph ng th c stop() c a tuy n đo n, tuy n đo n không t n t i
Ví d :
Vi t ch ng trình hai tuy n đo n in ra t “ping” và t “PONG” v i cac
class PingPong extends Thread {
Trang 33làm cho m t l p có th s d ng đ c trong môi tr ng đa tuy n đo n, các ph ng th c t ng
ng s đ c khai báo là synchronized
N u m t tuy n đo n kích ho t m t ph ng th c synchronized trên m t đ i t ng, đ i t ng đó s b khóa M t tuy n đo n khác kích ho t ph ng th c synchronized trên cùng đ i t ng đó s b phong
t a cho t i khi khóa trên đ i t ng đ c gi i phóng
Ví d :
L p Account:
class Account{
private double balance;
public Account(double initialDeposit)
Trang 34L nh synchronized cho phép b n x lý mã đ ng b hóa mà khóa m t đ i t ng mà không
c n đòi h i b n tri u g i m t ph ng th c synchronized trên đ i t ng đó
Cú pháp
synchronized (expr) statement Khi có đ c khóa, statement đ c x lý y nh nó là m t ph ng th c synchronized trên đ i
t ng đó
Ví d
Chuy n các ph n t trong m ng thành các s không âm
public static void abs(int[] v) {
synchronized(v) {
for(int i=0;i<v.length;i++) {
} }
}
Ví d
L p trình tuy n đo n b ng cách th c thi giao di n Runnable
class RunPingPong implements Runnable
{
RunPingPong(String w, int d)
Trang 35Runnable ping = new RunPingPong("ping",33);
Runnable pong = new RunPingPong("PONG",100);
Font f = new Font("Times New Roman",Font.BOLD,24);
Date d = new Date();
public void init()
Trang 36} }
}
public void paint(Graphics g)
{
Trang 38public static InetAddress InetAddress.getByName(String hostname)
public static InetAddress[] InetAddress.getAllByName(String hostname)
public static InetAddress InetAddress.getLocalHost()
Ta xét ph ng th c đ u tiên Ph ng th c này nh n tên c a hostname làm tham s và tr v
System.out.println("Cach su dung: java TimDCIP <Hostname>");
}
String hostName = host.getHostName();
Trang 39• public String getHostName(): Ph ng th c này tr v m t xâu bi u di n hostname c a
m t đ i t ng InetAddress N u máy không có hostname, thì nó s tr v đ a ch IP c a máy này d i d ng m t xâu ký t
• public int getAddress() : N u b n mu n bi t đ a ch IP c a m t máy, ph ng th c
d ng d li u đ c nh n, hay làm th nào đ truy n tin v i server; b n ch c n cho bi t URL Java s
l y d li u v cho b n
L p java.net.URL là m t khái ni m v b đ nh v tài nguyên th ng nh t N u l u tr URL d i
d ng m t đ i t ng String s không có l i h n so v i vi c t ch c URL nh m t đ i t ng v i các
tr ng : giao th c (protocol), hosname, c ng (port), đ ng d n (path), tên t p tin (filename), m c tài
li u (document section), m i tr ng có th đ c thi t l p m t cách đ c l p
T o các đ i t ng URL m i
Có b n constructor, khác nhau v thông tin mà nó c n Constructor mà b n s d ng ph thu c vào thông tin mà b n có, và khuôn d ng trong URL đó T t c các constructor này s đ a ra ngo i l MalformedURLException (URL không đúng khuôn d ng) n u ta t o ra m t URL cho m t giao th c mà
nó không đ c h tr
̇ public URL(String url) throws MalformedURLException
ây là constructor đ n gi n nh t; tham s c a nó ch là m t URL d ng xâu
Ví d
try{
URL u = new URL(“http://www.sun.com/index.html”);
}