Mục lục
5
Lời giới thiệu 5
Chơng 1 7
Java và những hứa hẹn 7
1.1 Java là gì và nó bắt nguồn từ đâu ? 7
1.2 Java: u điểm và nhợc điểm 8
Ưu điểm 8
Nhợc điểm 10
1.3 Mô hình HTML và mô hình Java 11
Mô hình HTML 11
Mô hình Java 12
1.4 Môi trờng phát triển Java 12
Tạo một file nguồn 13
Biên dịch file nguồn 13
Chạy ứng dụng 13
Phân tích một ứng dụng Java 13
Lời giải thích trong Java 14
Định nghĩa một lớp 14
Phơng thức main (Main Method) 14
Tạo một file Java nguồn 15
Biên dịch file nguồn 15
Tạo file nguồn gồm cả Applet, tạo ra file HTML 15
Chạy Applet (Running Applet) 15
Import Classes and Packages 16
Định nghĩa một phân lớp Applet 16
Chơng 2 17
Tổng quan về mạng máy tính 17
2.1 Bạn đã biết những gì về mạng Internet trong Java 17
Nạp Applet từ mạng 17
Gói Sun.audio 44
Lớp AudioStream 45 2
Lớp AudioData 46
Lớp AudioDataStream 46
Lớp AudioStreamSequence 47
Lớp AudioPlayer 48
Cơ sở luật mã hoá à 48
Giới thiệu chơng trình 51
Lớp UlawCodec 52
Lớp Oscillator 54
Lớp OscopeFrame 57
Lớp DoubleGraph 60
Chơng 5 61
Nguyên tắc chuyển đổi 61
âm Thanh số 61
5.1 - DFt 61
Tính số lợng bit cần thiết để lấy mẫu 63
Lớp futils. Timer : làm chuẩn DFT 64
Benchmarking 65
IDFT 65
5.2 FFT 67
Lớp FFT 69
Tính log của số nguyên 70
Kiểm tra FFT và IFFT 71
Tính PSD 72
Thực hiện chuyển đổi bằng chơng trình 73
Lọc tạp âm bằng FFT 77
4
Lời giới thiệu
Ngày nay việc ứng dụng máy tính không chỉ dừng lại ở mức độ trong các
phòng thí nghiệm, các trung tâm máy tính hay các văn phòng nữa mà nó đã mở
rộng ra và trở thành một phơng tiện giải trí trong gia đình hay thậm trí trở thành
một phơng tiện dạy học. Hơn nữa các dữ liệu của ngời sử dụng cũng không đơn
thuần chỉ là những tập văn bản, hồ sơ hay các tài liệu nghiên cứu mà nó còn
bao gồm cả những dữ liệu âm thanh và hình ảnh. Hiện nay, trên thế giới và tại
Việt Nam chúng ta đã quen thuộc với khái niệm xử lý tín hiệu số, là một bộ phận
rất quan trọng trong lĩnh vực máy tính; nhng để có đợc các thuật toán đòi hỏi
chúng ta phải có một số các kỹ thuật đi kèm. Vấn đề truyền dữ liệu trên mạng
mà điển hình là âm thanh và hình ảnh số cũng là một nhu cầu cần phải đợc đáp
ứng. Vì vậy các đáp ứng về mạng không ngừng đợc cải tiến để đảm bảo việc
truyền dữ liệu có hiệu quả. Mặt khác trong thời đại multimedia, xử lý tín hiệu là
sự giao nhau của các lĩnh vực toán học, kĩ thuật tính toán, và khoa học máy tính.
Trong thời gian làm đồ án tốt nghiệp em tập trung tìm hiểu về các thuật
toán và các ứng dụng của xử lý tín hiệu âm thanh và hình ảnh bằng ngôn ngữ lập
trình Java, các modul đợc đặt trong chơng trình Diffcad.java. Đồ án gồm có 7
chơng:
Chơng 1: Giới thiệu về java. Chơng này trình bày một cách khái quát về sự
ra đời và một số đặc trng của Java.
Chơng 2: Giới thiệu về mạng máy tính trong Java. 5
Chơng 3: Xử lý tín hiệu số; trình bày các khái niệm cơ bản và tập trung một
phần vào phép biến đổi Fourier của tín hiệu rời rạc.
C++ và Objective C. Java chấp nhận mô hình của ZetaLisp, một phần mở rộng
của LISP và chạy nhanh hơn các máyLISP.
Khi chúng ta nói tới Java techonology, cũng có nghĩa chúng ta nói về ngôn
ngữ lập trình java và hệ thống mà nó cung cấp. Hệ thống bao gồm một th viện
lớn các lớp đợc gọi là Java class libraries. Java techonology cũng bao
hàm cả cách chạy chơng trình, hoạt động dựa trên một machine Java. Java
techonology cho phép thực thi các machine Java bằng cách sử dụng mọi nối kết
phần cứng và phần mềm. Khi machine java đợc thực thi trên phần mềm thì nó đ-
ợc gọi là máy ảo Java (Java virtual machine).
Một trong những mục tiêu khi thiết kế java là nhằm đạt đợc hiệu quả khi thực
hiện các tính toán độc lập. Trong mô hình tính toán độc lập, mã (code) đợc nạp
để thực thi các đòi hỏi có tính chất bảo mật. Nếu mã nguồn (source code) là
không đáng tin cậy thì source code đợc xử lí thiếu chính xác đối với dữ liệu của
ngời dùng và phần cứng máy tính. Sự nguy hại của dữ liệu ngời dùng có thể bao
hàm cả phép truy cập và phép phân bố các thông tin dễ bị tác động nh số thẻ tín
dụng, số tài khoản và các dữ liệu có tính chất sở hữu khác.
Nếu chúng ta xem xét tất cả các Web server nh một phần của hệ thống máy
tính lớn, thì Web là một hệ điều hành lớn nhất trên thế giới. Trên thực tế, ngôn
ngữ lập trình của Web là java, và nữa, với cách nhìn này thì Java là một ngôn
ngữ lập trình hệ điều hành. Sun có kế hoạch đa ra Java machine không ảo tức là
các Java machine thực hiện trên phần cứng. Hệ điều hành cho các máy nh vậy sẽ
đựoc viết bằng Java. Mọi ngời sẽ không phải viết mã cryptic C cho phần Kernel
của hệ điều hành mà nó sẽ đợc viết bằng Java.
Các chip Java sẽ đợc giảm giá mạnh, một số các thiết bị đợc nhắm tới nh TV
set-top box, cellular telephone, paper, digital TV, smart VRC, PDA, máy in, máy 7
copy v v sẽ đợc máy tính trợ giúp, tức là Sun muốn tất cả các máy tính đều chạy
Java. Bởi vì các chip đợc chạy trên mã byte code, nên nó không cần biên dịch
Java là dễ dàng dịch chuyển: Java là một ngôn ngữ đa nền (multi-platform).
Khẩu hiệu của Java là viết một lần chạy mọi nơi (Write Once, Run
Anywhere). Bởi vì ở đây chỉ xác định có một máy ảo, Java đa ra một giao
diện lập trình không chuẩn tắc tới các applet và các ứng dụng trên mọi phần
cứng. Nền Java là lí tởng cho Internet, ở đó chơng trình có thể đợc chạy trên
mọi máy tính trong mạng. Khi ta biên dịch mã nguồn của Java, ta phải thực
thi trên các mã byte (byte code). Mã byte đợc tạo thành bởi trình biên dịch
của Java và cấu trúc nên các chỉ dẫn tới Java virtual machine. Java là một
ngôn ngữ dễ dịch chuyển cho phép chạy trên mọi phần cứng mà máy ảo
Java có thể chạy. Mã byte lu trong file .class, đợc nạp tới máy ảo Java và
chứa cả biên dịch mã byte. Trên hình 1.2 là mối quan hệ giữa chơng trình
Java và phần cứng.Hình 1.2
Java là hớng đối tợng: Java là ngôn ngữ lập trình hớng đối tợng. Trong mô
hình hớng đối tợng, một biến kiểu đối tợng chứa các dữ liệu cũng nh các
thuật toán cần thiết để thao tác với dữ liệu. Ngợc lại một ngôn ngữ lập trình
không hớng đối tợng là ngôn ngữ lập trình coi các biến nh một đối số tham
chiếu tới thủ tục. Không giống nh Pascal, C, Fortran, C++, Java không có
hàm (function). Trong Java tất cả các phơng thức (method) đều nằm trong
các lớp (classes). C++ là một ngôn ngữ có mở rộng về hớng đối tợng. Điều
này có nghĩa là ngời lập trình không hớng đối tợng có thể viết đợc trong C+
+, nhng một điều nh vậy không đợc cho phép trong Java.
Java không có con trỏ: Java thì crash-proof hơn C, C++ và Pascal - một đặc
điểm tốt hơn. Lí do là Java không cung cấp một kĩ thuật nào cho phép thao
tác với con trỏ một cách trực tiếp. Do đó không có cách cho ngời lập trình
thao tác với địa chỉ bộ nhớ. Theo nhiều cách khác nhau một con trỏ không
đúng có thể gây lỗi cho bộ nhớ hay chơng trình. Chúng ta không đủ không
gian nhớ để liệt kê tất cả chúng. Chúng ta có thể cảm ơn rằng java không có
số ngẫu nhiên,v v
Nhợc điểm
Đôi khi thu rác là một việc làm ít hiệu quả: mặt hạn chế của việc thu rác nh
sau. Thu rác có thể dẫn tới chơng trình không quyết định đợc thời gian chạy.
Đối với hệ thống lớn, thu rác có thể sử dụng một lợng thời gian xác định nào
đó của bộ vi xử lý.
Java không phải là một ngôn ngữ hớng đối tợng thuần tuý. Chúng ta không
có khả năng tạo ra các instance của kiểu dữ liệu primative. Các kiểu dữ liệu
cơ bản trong Java là boolean, int, long, float, double, char
và byte. Ngợc lại trong Smalltalk thì tất cả các kiểu dữ liệu đều là các lớp.
API thiếu nhiều đặc trng: java thiếu các đặc trng có tính chất chìa khóa cho
một vấn đề. Ví dụ nó không cho phép chúng ta lập trình với các cổng nối
tiếp (cho dù hầu hết các máy tính đều có ít nhất một cổng) cũng nh không
cho phép đa ra máy in nếu đang ở trong một chơng trình Java. Java là một
ngôn ngữ mới, và bởi vì các đặc trng còn thiếu trong API, Java có thể không
dễ dàng sử dụng cho một số các ứng dụng nào đó. 10
Bird
Reptile
Mamal
Human
Student
Professor
Java không có phơng thức đảo cung cấp cho C++: có thể chúng ta muốn mở
rộng các đặc trng của Java API bằng cách lập trình trên một ngôn ngữ khác.
Thật không may là ngôn ngữ lựa chọn này chỉ có giới hạn là C. Không có
cách nào nối giữa Java và C++, một phần có thể do vấn đề về name-space
mangling. Trong C++, chức năng mã nguồn đợc định danh trong các hàm
xem nó nh một Word document nhng Word 5 trên Mac không thể đọc đợc các
Word 6 hay 7. Vì vậy phải có một file RFT (Rich text format) để Word 5
có thể nhận biết hầu hết nội dung trong tài liệu. Tài liệu kiểu Word Document
thờng đợc chuyển sang dạng HTML nhằm cho phép mọi browser trên mạng có
thể "nhìn" nó. Thêm nữa HTML chỉ đáp ứng các đồ họa dới dạng ảnh GIF và
không duy trì trang tài liệu nguồn nguyên thuỷ dới dạng Word document. Ta
cũng có thể sử dụng PostScrip để nạp và in các tài liệu, tuy nhiên không cho
phép soạn thảo lại tài liệu và cũng không phải mọi file PostScrip đều có thể in đ-
ợc với các máy in. Bên cạnh đó, Adobe có tiến thêm một bớc trong Portable 11
Document Format (PDF) cho phép xem và in tất cả các tài liệu. Tuy vậy còn tồn
tại vấn đề là ngời dùng không thể soạn thảo lại các tài liệu này.
Mô hình Java
Mô hình Java khắc phục một số thiếu sót của mô hình HTML nhng nó không
dành lấy đợc sự chấp nhận rộng rãi. Trong Java, các mã byte tạo ra sau khi biên
dịch đợc lu trong các file .class. Các file này đợc nạp xuống các class loader của
máy client. Sau khi kiểm tra, máy ảo Java sẽ phiên dịch các mã byte.
Nguyên tắc hoạt động của trình biên dịch Java có dạng nh trên hình 1.4. Hình 1.4
Cùng với Java, một thuật toán giải mã các dạng dữ liệu mới có thể đợc nạp
tuỳ theo câu lệnh. Tức là Web là một hớng đối tợng trong hoàn cảnh, dữ liệu đợc
nhập cùng với chơng trình để thực hiện một tác vụ. Mô hình Java là một cải tiến
lớn đáp ứng nhu cầu hiện tại, nó yêu cầu chúng ta có một giải pháp cho việc giải
mã trên phần cứng của ta.
Nguyên tắc của mô hình Java trên mạng nh trên hình 1.5
Runtime System/ Hardware
trình Java. Sử dụng nền Java Development Kit (JDK). Ta có thể tìm thêm các
thông tin trên địa chỉ http://java.sun.com/prodocst/jdk/index.html.
Tạo một file nguồn
Sử dụng một trình soạn thảo, tạo một file có tên là Hello.java với các dòng
lệnh nh sau:
/**
* The Hello class implements an application that
* simply display Hello world to the standard output
*/
class Hello {
public static void main ( String[] args){
System.out.println( Hello World);
}
}
Biên dịch file nguồn
Biên dịch file nguồn bằng trình biên dịch của Java.
UNIX: javac Hello.java
DOS shell (Windows 95/NT): javac Hello.java
Nếu biên dịch thành công, trình biên dịch sẽ tạo ra file tên là Hello.class
trong cùng th mục với file nguồn Hello.java. File kiểu class này chứa các mã
byte . Nếu biên dịch không thành công, thì hãy chắc chắn ta nhập đúng kiểu và
tên của chơng trình chính xác nh chỉ ra ở trên hay không, và hãy chắc chắn chữ
thờng, chữ hoa có đúng nh trong tên file không.
Chạy ứng dụng
Chạy chơng trình bằng Java interpreter:
UNIX: java Hello
DOS shell( Window 95/NT) java Hello
khi đó trên màn hình ta sẽ nhận đợc dòng chữ : Hello World.
Phân tích một ứng dụng Java
Bây giờ hãy nhìn vào chơng trình nguồn, chúng ta có thể phân vân không
class Hello {
public static void main ( String[] args){
System.out.println( Hello World); // Display the String
}
}
Lớp là một khái niệm cơ bản, gồm một khối các câu lệnh của ngôn ngữ lập
trình hớng đối tợng giống nh kiểu java. Nó là một bản chi tiết mô tả trạng thái,
cách thức thực hiện đợc nối kết với instance của lớp đó. Khi ta khởi tạo một
lớp, ta tạo ra một đối tợng mà nó có cùng các trạng thái, cách thức thực hiện nh
các instance khác của cùng lớp đó. Trạng thái nối kết với lớp hay đối tợng đợc
lu trong các biến thành phần member variables. Cách thức thực hiện nối kết
với lớp hay đối tợng đợc thực thi trong các phơng thức.
Phơng thức main (Main Method)
Dòng đợc tô đậm là điểm bắt đầu và kết thúc của khai báo phơng thức main.
/**
* The Hello class implements an application that
* simply display Hello world to the standard output
*/
class Hello {
public static void main ( String[] args){
System.out.println( Hello World);
}
}
Mỗi ứng dụng Java đều có một phơng thức main đợc khai báo nh sau:
public static void main(String[] args)
Phơng thức main đợc khai báo cùng với ba từ khoá:
public: cho phép các đối tợng gọi tới phong thức main.
static : có nghĩa là phơng thức main là một phơng thức kiểu lớp.
void: chỉ ra rằng phơng thức main không trả lại giá trị.
<BODY>
Here is the output of my program:
<APPLET CODE= HelloWorld.class WIDTH=150 HEIGH=25>
</APPLET>
</BODY>
</HTML>
Chạy Applet (Running Applet)
Để chạy applet, ta phải nạp file HTML vào một Browser cung cấp JDK( cũng
có thể sử dụng Applet Viewer cung cấp bởi JDK thay vì một Web browser đầy
đủ). Để nạp file HTML ta cần báo cho browser biết file URL hay file HTML ta
vừa tạo. Ví dụ có thể nhập vào trờng địa chỉ hay vị trí của browser giống nh dới
đây:
file:/home/kwaTrath/java/Hello.html
Hầu hết các browser cho phép mở một file từ bảng chọn File trên browser.
UNIX : appletviewer file:/home/kwaTrath/java/Hello.html
DOS shell:appletviewer file:/home/kwaTrath/java/Hello.html 15
Import Classes and Packages
Để sử dụng các th viện (các gói lớp) có sẵn cung cấp bởi java, hay các th viện
do ngời lập trình tạo ra, java sử dụng từ khoá import. Ta hãy xem ví dụ sau. Hai
dòng đầu liệt kê hai lớp đợc sử dụng trong applet: Applet và Graphics
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.drawString( Hello world!, 50, 25 );
}
}
Tổng quan về mạng máy tính
Để thao tác các tác vụ với mạng internet thông qua ngôn ngữ Java chúng ta
hãy xem xét cơ sở của mạng trong Java.
2.1 Bạn đ biết những gì về mạng Internet trong Java ã
Thuật ngữ network gây sự lo ngại cho nhiều ngời lập trình nhng chúng ta
đừng nên lo ngại. Sử dụng mạng thì rất dễ dàng và thuận tiện đồng thời cho phép
cung cấp các java platform. Sau đây chúng ta đi tìm hiểu một số nét cơ bản về
mạng internet cùng với java.
Nạp Applet từ mạng
Nếu truy nhập vào mạng và tới một java-compatible Browser, bạn không chắc
chắn sẽ thi hành đợc nhiều applet. Applet mà ta đang chạy, đợc tham chiếu bởi
một nhãn đặc biệt trong file HTML đó là nhãn <APPLET>. Applet có thể định
vị mọi nơi; trên máy đơn hay một nơi bất kì trên mạng. Vị trí của applet đợc chỉ
ra bằng mã lệnh trong nhãn <APPLET>, khi đó browser sẽ giải mã vị trí và chạy
applet này. Nếu applet nằm trên một số máy khác ngoài máy của ta, browser
phải nạp applet trớc khi chạy nó. Browser thực hiện tất cả các lời nối kết tới
mạng và nhận dữ liệu từ đó, bằng cách ấy sẽ cho phép bạn chạy từ mọi nơi trên
mạng.
Nạp một ảnh từ mạng
Nếu bạn có dự định lập trình với các applet và các ứng dụng thì bạn phải sử
dụng một lớp có tên java.net nằm trong gói URL. Lớp này đa ra một Uniform
Resource Location (URL), là địa chỉ một tài nguyên trên mạng. Applet của bạn
cùng các ứng dụng có thể sử dụng một URL để tham chiếu và nối kết tới các tài
nguyên trên mạng. Ví dụ để đa môt hình ảnh từ mạng, chơng trình Java phải tạo
ra một đối tợng URL chứa địa chỉ của ảnh đó. Chúng ta sẽ nói chi tiết hơn trong
phần sau.
Cơ sở về mạng
Máy tính chạy trên mạng giao tiếp với các máy khác bằng các giao thức nh
Transport Cotrol Protocol (TCP) hay User Datagram Protocol (UDP)
có dạng nh hình sau.
các gói dữ liệu độc lập, gọi là datagram, từ một ứng dụng này tới một ứng dụng
khác. Gửi gói dữ liệu thì giống nh gửi một bức th thông qua các dịch vụ gửi th:
việc phân phát là không quan trọng và không bảo đảm; mỗi bản tin thì độc lập
với các bản tin khác.
PORTS
Nói một cách tổng quát máy tính đợc xem là một phần cứng vật lý nối với
mạng. Tất cả dữ liệu dành cho một máy tính đợc đa tới thông qua nối kết. Tuy
nhiên dữ liệu có thể bị dùng cho các ứng dụng khác nhau chạy trên máy tính đó.
Vậy làm thế nào một máy tính biết đợc ứng dụng nào nhận dữ liệu gửi đến. Câu
trả lời là thông qua các ports.
Dữ liệu truyền trên mạng có kèm theo một thông tin địa chỉ xác định máy
tính và số hiệu cổng mà nó đợc chỉ định tới. Máy tính đợc định danh bởi địa chỉ
IP 32 bit. Cổng đợc định danh bằng địa chỉ 16 bit, qua đó TCP và UDP sử dụng
để phân phát dữ liệu cho từng ứng dụng tơng ứng. 18
Trong kiểu nối kết cơ sở nh TCP thì một ứng dụng của server ràng buộc với
một socket để xác định số hiệu của cổng. Điều này có hiệu quả trong việc đăng
kí với server về hệ thống lu tất cả dữ liệu dành riêng cho cổng đó. Một máy con
client sẽ gặp server tại cổng, xem minh hoạ trên hình 2.2.
Hình 2.2
Trên cơ sở giao tiếp gói kiểu UDP, các gói dữ liệu có kèm theo số hiệu cổng
để tạo ra kết nối, nh trên hình 2.3. Số hiệu cổng thay đổi từ 0 tới 65535 bởi nó đ-
ợc đánh số 16 bit. Số cổng nằm trong khoảng 0 tới 1023. Chúng đợc dành cho
các dịch vụ thông thờng nh HTML hay FTP và một số các dịch vụ khác.
Hình 2.3
2.2 Lớp mạng trong JDK
Dựa vào các lớp trong gói java.net các chơng trình có thể sử dụng giao thức
TCP hay UDP để giao tiếp thông qua mạng. Các lớp URL, URLConnection,
chấm và hai dấu gạch chéo phải. Khai báo giao thức chỉ ra tên của giao thức đợc
sử dụng để tìm kiếm tài nguyên. Ví dụ sử dụng giao thức chuyển đổi siêu văn
bản (HTTP), là một cách điển hình để cung cấp các tài liệu hypertext. HTTP là
một trong số rất nhiều giao thức đợc sử dụng để truy nhập tới các kiểu tài nguyên
khác nhau trên mạng. Một số các tài nguyên khác nh File trasfer Protocol (FTP),
Gopher, File, và các kiểu mới khác.
Tên tài nguyên là địa chỉ chỉ tới tài nguyên, địa chỉ này phải đầy đủ. Dạng
của tên tài nguyên dựa vào giao thức đợc sử dụng, nhng không phải đối với nhiều
giao thức, bao gồm cả HTTP, tên tài nguyên chứa một hay nhiều các thành phần
khác nhau nh trong bảng 23 dới đây.
Host Name the name of the machine on which the resource
lives
File name The pathname to the file on the machine
Port Number The port number to which to connect ( typical
optional)
Reference A reference to a named anchor within a
resource that usually indentifies a specific
location within a file (tipically optional). 20
Bảng 23
Đối với nhiều giao thức, tên host và tên file cùng đợc yêu cầu, trong khi số
cổng và tham chiếu thì không đợc chọn. Ví dụ, tên tài nguyên cho một HTTP
URL phải xác định trên một máy chủ và đờng dẫn tới tài liệu trên máy đó; nó
cũng có thể xác định một tên của host và một chỉ dẫn tận cùng cho tên file có
dạng /index.html.
Tạo một URL
Cách dễ dàng nhất tạo ra một đối tợng URL là từ một chuỗi các kí tự do ngời
dùng nhập vào để tạo nên một địa chỉ URL. Cách này cho phép những ngời khác
một đối tợng URL dành cho nó nh dới đây. 21
URL gamelanNetworkBottom = new URL(gamelanNetwork, "#BOTTOM");
Những cấu trúc URL khác
Lớp URL cung cấp thêm hai constructor để tạo ra một đối tợng URL. Các
constructor này có hiệu quả khi ta làm việc với các giao thức có sử dụng URL
nh kiểu HTTP URL, constructor chứa tên của host, tên file, số hiệu cổng,và các
thành phần tham chiếu khác trong phần tên tài nguyên của URL. Hai constructor
cho phép ta không cần phải biết đầy đủ tên đờng dẫn tới tài nguyên mà chỉ cần
biết tới phần mở rộng của nó.
Ví dụ ta thiết kế một bảng panel cho browser giống nh bảng panel của file
browser, nhằm cho phép ngời sử dụng chọn giao thức, tên host, số hiệu cổng và
tên file mà họ yêu cầu. Bạn có thể cấu trúc một URL từ các thàh phần của panel.
Constructor đầu tiên tạo ra một đối tợng URL từ giao thức, tên host, tên file.
Câu lệnh sau đây tạo ra một URL tham chiếu tới file Gamelan.net.html tại
Gamelan site:
new URL("httl",,"/pages/Gamelan.net.html");
điều này tơng đơng với:
new URL( );
Đối số đầu tiên là giao thức, đối số thứ hai là tên host và cuối cùng là đờng
dẫn tới file. Chú ý rằng tên file chứa một dấu gạch chéo ngợc đặt trớc nó.
Constructor cuối cùng cộng thêm số hiệu cổng vào danh sách các đối số đã sử
dụng trong constructor trớc.
URL gamelan = new URL("http","www.gamelan.com".,80
,"pages/Gamelan.network.html");
Câu lệnh này tạo ra một đối tợng URL nh sau:
http://www.gamelan.com:80/pages/Gamelan.network.html
MalfformedURLException
tạo ra.
import java.net.*;
import java.io.*
public class ParseURL {
public static void main(String[] args) throws Exception{
URL aURL=new URL("http://java.sun.com:80/docs/"+
"books/tutorial/intro.html#"+
"DOWNLOADING");
System.out.println("protocol="+aURL.getProtocol());
System.out.println("host =" +aURL.getHost());
System.out.println("filename =" +aURL.getFile());
System.out.println("port =" +aURL.getPort));
System.out.println("ref =" +aURL.getRef());
}
}
Đọc trực tiếp từ một URL
Sau khi đã thành công trong việc tạo ra một đối tợng URL, ta có thể gọi tới
phơng thức openStream của đối tợng để nhận đợc luồng dữ liệu biểu thị nội
dụng của nó. Việc đọc nội dung của một URL dễ dàng nh việc đọc một luồng dữ
liệu vào.
Chơng trình java ngắn dới đây sử dụng phơng thức openStream để nhận đợc
luồng dữ liệu vào trên địa chỉ http://www.yahoo.com. Nếu sau khi đã mở một
BufferedReader trên một luồng dữ liệu thì đọc từ BufferReader với cách làm nh
vậy ta có thể đọc đợc nội dung một URL bất kì.
import java.net.*;
import java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL yahoo = new URL(http://www.yahoo.com);
BufferedReader in = new BufferedReader(
import java.net.*;
import java.io.*;
public class URLConnectionReader {
public static void main(String[] args) throw Exception
{ http://www.yahoo.com
URL yahoo = new URL(http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BuffereReader in = new BufferReader(
New InputStreamReader(
yc.getInputStream()));
String inputLine;
while((inputLine = in.readLine())!=null)
System.out.println(inputLine);
in.close();
}
}
Viết một URLConnection
Nhiều trang HTML chứa các dạng forms- trờng văn bản và các đối tợng GUI
khác cho phép nhập dữ liệu và gửi tới các server. Sau khi nhập vào các thông tin
yêu cầu cần thiết và khởi tạo nó bằng cách nhấn chuột lên một nút, thì Web
browser sẽ ghi dữ liệu lên URL thông qua mạng. Tại đầu cuối kia, một bản cgi-
bin, thờng nằm trên server sẽ lu lại các dữ liệu của bạn, xử lý nó và gửi cho bạn
các đáp ứng dới dạng một trang Web mới.
Rất nhiều bản cgi-bin sử dụng phơng thức potst (POST METHOD) để đọc dữ
liệu trên các máy con. Vì thế ghi vào một URL đợc gọi là posting to a URL. Khi
lập trình, java cũng cho phép tác động tới các bản cgi-bin. Điều này đợc thực
hiện qua các bớc sau:
1. Tạo ra một URL
2. Mở một nối kết tới URL
25