Lập trình mạng - Chương 2: Một số vấn đề trong lập trình Java
Việc tạo ra đối tượng hiện thực lớp URLConnection bằng phương
thức openConnection của lớp URL.
Để sử dụng lớp URLConnection, thực hiện các bước cơ bản sau:
Xây dựng một đối tượng URL
Gọi phương thức openConnection() của đối tượng URL đểtìm kiếm
một đối tượng URLConnection cho URL đó.
Cấu hình đối tượng URL
Đọc các trường header.
Nhận một luồng nhập và đọc dữliệu.
Nhận một luồng xuất và ghi dữliệu.
Đóng liên kết.
114 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 1335 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình mạng - Chương 2: Một số vấn đề trong lập trình Java, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 2:
Một số vấn đề trong lập
trình Java
GIẢNG VIÊN : THS . NGUYỄN MINH THÀNH
EMAIL : THANHNM@ITC.EDU.VN
Nội Dung
1. Java Swing
2. Quản lý luồng nhập xuất
3. Lập trình đa tuyến
4. Quản lý địa chỉ mạng
MỘT SỐ VẤN ĐỀ TRONG JAVA 2
Giới Thiệu về GUI Swing
Swing là bộ thư viện chứa các control để thiết kế giao diện
cho chương trình Java trên Desktop.
Gói javax.swing.*
Các thành phần bắt nguồn từ AWT (gói java.awt.*)
MỘT SỐ VẤN ĐỀ TRONG JAVA 3
Giới Thiệu về GUI swing
Các control của Java Swing được thiết kế là một lớp độc lập và
tất cả đều có hàm paint() để thực thi việc vẽ control đó trên giao
diện.
Các Control đều được kế thừa từ mộ lớp chung đó là
Jcomponent (lớp thể đối tượng Control chung nhất)
Tất cả các control đều là môn Container tức là có thể chức các
Control khác bên trong nó.
MỘT SỐ VẤN ĐỀ TRONG JAVA 4
Giới Thiệu về GUI swing
Các lớp kế thừa của nhiều thành phần Swing
MỘT SỐ VẤN ĐỀ TRONG JAVA 5
Các thành phần cơ bản
JLabel: Hiển thị văn bản hay những biểu tượng.
JTextField: Trường nhập dữ liệu từ bàn phím, cũng có thể
hiển thị thông tin.
JButton: Nút nhấn dùng kích họat một sự kiện khi nhấp
chuột.
JCheckBox: Hộp kiểm tra cho phép được lựa chọn hay
không được lựa chọn.
JRadioButton : nút tùy chọn đơn
Jtoggle Button : nút đảo
MỘT SỐ VẤN ĐỀ TRONG JAVA 6
Các thành phần cơ bản
JComboBox: Hộp danh mục thả xuống từ đó người sử dụng
có thể chọn một bởi việc kích một mục trong danh sách
hoặc nhập nội dung vào trong hộp.
JList: Hộp danh sách từ đó người sử dụng có thể chọn bởi
việc nhấp vào một mục trong danh sách. Có thể chọn nhiều
mục.
JPanel: Một Container trong đó những thành phần có thể
được đặt và cách trình bày.
JFrame : cửa sổ chương trình
MỘT SỐ VẤN ĐỀ TRONG JAVA 7
Các thành phần cơ bản
MỘT SỐ VẤN ĐỀ TRONG JAVA 8
JFrame
- Là một cửa sổ có tiêu đề, viền, thanh menu ( tùy
chọn ) và các thành phần được chỉ định khác
- Nó có thể di chuyển, thay đổi kích thước và có icon
đại diện
- Nó không phải là một subclass của JComponent
- Nó thường được dùng để chứa các thành phần giao
diện khác ( Button, Label, )
MỘT SỐ VẤN ĐỀ TRONG JAVA 9
Một số phương thức cơ bản
của JFrame :
- setSize(int width,int height) : Đặt kích thước cho JFrame
- setLocation(int x,int y) : Đặt vị trí cho JFrame.( Mặc định
thì một JFrame sẽ hiển thị ở vị trí góc trên – trái của màn
hình. )
- setVisible(boolean b) : Đặt JFrame ẩn/hiện
- setDefaultCloseOperation(int operation): Đặt hành động
mặc định sẽ xảy ra khi người dùng “close” Frame. - -
- setTitle(String title) : Đặt tiêu đề cho JFrame
- setResizable(boolean b): Đặt JFrame có được thay đổi
kích thước hay không
- setLayout(LayoutManager l) thiết lập cách thức sắp đặt
Control
MỘT SỐ VẤN ĐỀ TRONG JAVA 10
Các bước cơ bản tạo một cửa
sổ JFrame
B1 : Khởi tạo một đối tượng của lớp JFrame
B2 : Đặt kích thước cho JFrame
B3: Đặt tiêu đề cho JFrame ( Nếu không đặt thì thanh tiêu đề sẽ
trắng )
B4: Đặt hành động mặc định cho việc “close” JFrame
B5: Đặt JFrame hiển thị
MỘT SỐ VẤN ĐỀ TRONG JAVA 11
Các hàm khởi tạo của JFrame
- JFrame() : Khởi tạo một frame mới invisible
- JFrame(GraphicsConfiguration qc) : Tạo một Frame được chỉ
địnhGraphicsConfiguration của màn hình thiết bị và tiêu đề trắng
- JFrame(String title) : Tạo một frame mới invisibile với tiêu đề
được chỉ định
- JFrame(String title, GraphicsConfiguration qc) : Tạo một Frame
được chỉ định tiêu đề và GraphicsConfiguration của màn hình
thiết bị.
MỘT SỐ VẤN ĐỀ TRONG JAVA 12
Ví dụ
MỘT SỐ VẤN ĐỀ TRONG JAVA
import javax.swing.JFrame;
public class JFrameDemo {
public static void main(String s[]) {
JFrame frame = new JFrame();
// Set title
frame.setTitle("JFrame Demo");
// Set location
frame.setLocation(300, 300);
// Set resizable
frame.setResizable(false);
// Set visible
frame.setVisible(true);
}
}
13
JLabel
Cung cấp văn bản trên GUI
Được định nghĩa với lớp JLabel
Có thể trình bày :
◦ Dòng văn bản chỉ đọc
◦ Hình ảnh
◦ Văn bản và hình ảnh
MỘT SỐ VẤN ĐỀ TRONG JAVA 14
Jlabel – Ví dụ
MỘT SỐ VẤN ĐỀ TRONG JAVA 15
public class DemoJFrame1 {
JFrame frm;
public DemoJFrame1(){
frm = new JFrame();
frm.setLayout(null);
JLabel lbl = new JLabel("Click me");
lbl.setBounds(50, 50, 100, 30);
frm.add(lbl);
frm.setSize(300, 400);
frm.setTitle(“Ví dụ”);
frm.setVisible(true);
}
public static void main(String args[]){
DemoJFrame1 demo = new DemoJFrame1();
}
}
JTextField
JTextField
◦ Hộp văn bản trong đó người sử dụng có thể nhập dữ liệu
từ bàn phím
JPasswordField
◦ Mở rộng JTextField
◦ Che giấu các ký tự mà người sử dụng nhập vào
MỘT SỐ VẤN ĐỀ TRONG JAVA 16
JTextField
public class DemoJFrame1 {
JFrame frm;
public DemoJFrame1(){
frm = new JFrame();
frm.setLayout(null);
JTextField txt = new JTextField("Click me");
txt.setBounds(50, 50, 100, 30);
frm.add(txt);
frm.setSize(300, 400);
frm.setTitle(“Ví dụ”);
frm.setVisible(true);
}
public static void main(String args[]){
DemoJFrame1 demo = new DemoJFrame1();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA 17
JTextArea
Vùng văn bản cho phép thao tác soạn thảo nhiều dòng văn bản.
public class DemoJFrame {
JFrame frm;
public DemoJFrame1(){
frm = new JFrame();
frm.setLayout(null);
JTextArea txt1 = new JTextArea();
txt1.setBounds(50, 50, 100, 100);
txt1.setLineWrap(true); frm.add(txt);
frm.setSize(300, 400);
frm.setTitle(“Ví dụ”);
frm.setVisible(true);
}
public static void main(String args[]){
DemoJFrame demo = new DemoJFrame();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA 18
Button
Nút nhấn - thành phần người sử dụng nhấp để kích họat
một hành động cụ thể.
Các loại Button
JButton
JToggleButton
JRadioButton
JCheckBox
MỘT SỐ VẤN ĐỀ TRONG JAVA 19
Button
MỘT SỐ VẤN ĐỀ TRONG JAVA 20
JButton
Nút nhấn thông thường, khi click xong nút sẽ trở lại trạng thái cũ.
public class DemoJFrame {
JFrame frm;
public DemoJFrame1(){
frm = new JFrame();
frm.setLayout(null);
JButton btn = new JButton("Click me");
btn.setBounds(50, 50, 100, 30);
frm.add(btn);
frm.setSize(300, 400);
frm.setTitle(“Ví dụ”);
frm.setVisible(true);
}
public static void main(String args[]){
DemoJFrame demo = new DemoJFrame();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA 21
JCheckBox và JRadioButton
Các nút trạng thái : Các giá trị On/Off hoặc true/false
public class DemoJFrame {
JFrame frm;
public DemoJFrame1(){
frm = new JFrame();
frm.setLayout(null);
JCheckBox chk = new JCheckBox("CNTT");
chk.setBounds(50, 50, 100, 30);
frm.add(chk); frm.setSize(300, 400);
frm.setTitle(“Ví dụ”);
frm.setVisible(true);
}
public static void main(String args[]){
DemoJFrame demo = new DemoJFrame();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA 22
JCheckBox và JRadioButton
public class DemoJFrame {
JFrame frm;
public DemoJFrame1(){
frm = new JFrame();
frm.setLayout(null);
JRadioButton rad1 = new JRadioButton("Nam");
JRadioButton rad2 = new JRadioButton("Nu");
rad1.setBounds(50, 50, 100, 30);
rad2.setBounds(50, 70, 100, 30);
ButtonGroup gioitinh =new ButtonGroup();
gioitinh.add(rad1); gioitinh.add(rad2);
rad1.setSelected(true);
frm.add(rad1); frm.add(rad2); frm.setSize(300, 400);
frm.setTitle(“Ví dụ”);
frm.setVisible(true);
}
public static void main(String args[]){
DemoJFrame demo = new DemoJFrame();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA 23
Ví dụ về Combo Box
Hộp danh sách chứa các mục từ đó người sử dụng có thể lựa chọn một mục khi nhấp vào
nó.
public class DemoJFrame {
JFrame frm;
public DemoJFrame1(){
frm = new JFrame();
frm.setLayout(null);
JComboBox cbo = new JComboBox();
cbo.addItem("item1");cbo.addItem("item2");
cbo.addItem("item3");cbo.addItem("item4");
cbo.setBounds(50, 50, 100, 30);
frm.add(cbo); frm.setSize(300, 400);
frm.setTitle(“Ví dụ”);
frm.setVisible(true);
}
public static void main(String args[]){
DemoJFrame demo = new DemoJFrame();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA 24
JList
Danh sách chọn tương tự ComboBox, nhưng có thể chọn nhiều item.
public class DemoJFrame {
JFrame frm;
public DemoJFrame1(){
frm = new JFrame();
frm.setLayout(null);
String[] items = new
String[]{"item1","item2","item3"};
JList lst = new JList(items);
lst.setBounds(50, 50, 100, 150);
frm.add(lst); frm.setSize(300, 400);
frm.setTitle(“Ví dụ”);
frm.setVisible(true);
}
public static void main(String args[]){
DemoJFrame demo = new DemoJFrame();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA 25
Xử lý sự kiện chuột
Các giao tiếp lắng nghe cho các sự kiện chuột
◦ MouseListener
◦ MouseMotionListener
Lắng nghe cho đối tượng sự kiện MouseEvent.
MỘT SỐ VẤN ĐỀ TRONG JAVA 26
Các phương thức của
MouseListener
public void mousePressed( MouseEvent event): Được gọi khi một
nút chuột được nhấn trên một thành phần.
public void mouseClicked( MouseEvent event ): Được gọi khi một
nút chuột được nhấn và thả ra trên một thành phần.
public void mouseReleased( MouseEvent event): Được gọi khi
một nút chuột được thả ra sau khi được nhấn. Trước sự kiện này
luôn luôn là một sự kiện mousePressed.
public void mouseEntered(MouseEvent event ): Được gọi khi con
trỏ chuột vào những ranh giới của một thành phần.
public void mouseExited(MouseEvent event ): Được gọi khi con
trỏ chuột rời ranh giới của một thành phần
MỘT SỐ VẤN ĐỀ TRONG JAVA 27
Các phương thức của
MouseMotionListener
public void mouseDragged(MouseEvent event)
◦ Được gọi khi nút chuột được nhấn và di chuyển.
◦ Trước sự kiện này luôn luôn là gọi tới sự kiện mousePressed.
◦ Tất cả các sự kiện kéo đều được gửi tới thành phần mà trên đó sự kéo bắt
đầu.
public void mouseMoved(MouseEvent event):
◦ Được gọi khi con chuột được di chuyển trên một thành phần.
◦ Tất cả các sự kiện chuyển động đều được gửi tới thành phần mà vị trí con
chuột hiện thời ở đó.
MỘT SỐ VẤN ĐỀ TRONG JAVA 28
Ví dụ
MỘT SỐ VẤN ĐỀ TRONG JAVA 29
Tạo một lớp chuyên lắng nghe sự kiện, cho nó kế thừadieejn1 trong 2 giao tiêp trên,
Viết lại các hàm tương ứng với các sự kiện nhận được
public class ButtonListener implements MouseListener{
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(null, "Ban da nhan
nut");
}
// các hàm khác
}
Ví dụ (tt)
Đăng ký Control trên Frame với lớp vừa tạo
JButton btn = new JButton("Click me");
btn.setBounds(50, 50, 100, 30);
btn.addMouseListener(new ButtonListener());
MỘT SỐ VẤN ĐỀ TRONG JAVA 30
Xử lý sự kiện phím
Giao tiếp KeyListener
Xử lý những sự kiện phím
◦ Sinh ra khi những phím trên bàn phím được nhấn và thả
Lớp KeyEvent chứa mã phím ảo mà đại diện cho phím.
Thực hiện tương tự sự kiện chuột
MỘT SỐ VẤN ĐỀ TRONG JAVA 31
Panel – Khung chứa
Giúp tổ chức các thành phần
Lớp JPanel là lớp xuất của JComponent
Có thể có nhiều thành phần (và các khung chứa panel khác)
được thêm vào chúng.
MỘT SỐ VẤN ĐỀ TRONG JAVA 32
Panel – Khung chứa
MỘT SỐ VẤN ĐỀ TRONG JAVA 33
Panel – Khung chứa
MỘT SỐ VẤN ĐỀ TRONG JAVA 34
Panel – Khung chứa
MỘT SỐ VẤN ĐỀ TRONG JAVA 35
JTabbedPane
Sắp xếp các thành phần trong các lớp
◦ Một lớp xuất hiện tại một thời điểm
◦ Truy cập mỗi lớp thông qua Tab
Lớp JTabbedPane
MỘT SỐ VẤN ĐỀ TRONG JAVA 36
JTabbedPane
MỘT SỐ VẤN ĐỀ TRONG JAVA 37
JTabbedPane
MỘT SỐ VẤN ĐỀ TRONG JAVA 38
JTabbedPane
MỘT SỐ VẤN ĐỀ TRONG JAVA 39
Thanh trượt - JSlider
Cho phép người sử dụng chọn giá trị nguyên trong một vùng giá trị xác
định.
Một số đặc tính:
◦ Tick marks (major and minor)
◦ Snap-to ticks
◦ Hướng (ngang hoặc đứng)
MỘT SỐ VẤN ĐỀ TRONG JAVA 40
Thanh trượt - JSlider
MỘT SỐ VẤN ĐỀ TRONG JAVA 41
Thanh trượt - JSlider
MỘT SỐ VẤN ĐỀ TRONG JAVA 42
Thanh trượt - JSlider
MỘT SỐ VẤN ĐỀ TRONG JAVA 43
Thanh trượt - JSlider
MỘT SỐ VẤN ĐỀ TRONG JAVA 44
Thanh trượt - JSlider
MỘT SỐ VẤN ĐỀ TRONG JAVA 45
Menu
Cho phép thực hiện các hành
động với GUI
Chứa bởi thanh menu (menu
bar)
◦ JMenuBar
Bao gồm các mục menu (menu
items)
◦ JMenuItem
MỘT SỐ VẤN ĐỀ TRONG JAVA 46
JPopupMenu
Context-sensitive popup menus
◦ JPopupMenu
◦ Menu được phát sinh phụ thuộc vào thành phần đang truy cập.
Cách tạo:
◦ JPopupMenu popup = new JPopupMenu();
◦ JMenuItem items = new JMenuItem(“Red”);
◦ popup.add(items);
◦
◦ // handling event – mousePressed
◦ popup.show(ev.getComponent(), ev.getX(), ev.getY());
MỘT SỐ VẤN ĐỀ TRONG JAVA 47
JPopupMenu
MỘT SỐ VẤN ĐỀ TRONG JAVA 48
Quản lý luồng nhập xuất
Một chương trình máy tính cần phải lấy dữ liệu từ bên ngoài vào
chương trình để xử lý. Sau khi chương trình xử lý xong sẽ xuất kết quả
ra ngoài cho thành phần khác để tiếp tục xử lý hoặc lưu trữ.
Dữ liệu được truyền bằng các luồng dữ liệu.
Java cung cấp package java.io với rất nhiều lớp và các tính năng phong
phú.
MỘT SỐ VẤN ĐỀ TRONG JAVA 49
Phân loại các luồng nhập xuất
Xét theo loại dữ liệu
luồng byte (byte stream)
luồng ký tự (character stream)
Xét theo thao tác
input (đọc byte) hoặc reader (đọc character)
output (ghi byte) hoặc writer (ghi character).
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
50
Các lớp nhập xuất cơ bản
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Có 4 lớp nhập xuất cơ bản
Các nguồn dữ liệu có thể nhập xuất từ Java
51
Các lớp nhập xuất luồng Byte
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các luồng byte có chức năng đọc hoặc ghi dữ liệu dạng byte.
Các lớp nhập
52
Các lớp nhập xuất luồng Byte (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các lớp xuất
53
Các lớp nhập xuất luồng Byte (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các phương thức trong lớp InputStream
int available() Trả về số byte còn lại trong stream.
void close() Đóng stream.
void mark(int readLimit)
Đánh dấu vị trí hiện tại. Nếu sau khi mark ta đọc quá
readLimit byte thì chỗ đánh dấu không còn hiệu lực.
boolean markSupported() Trả về true nếu stream hỗ trợ mark và reset.
abstract intread()
Đọc byte kế tiếp trong stream. Quy ước: Trả về-1 nếu hết stream.
Đây là phương thức trừu tượng.
int read(byte[]buffer)
Đọc một dãy byte và lưu kết quả trong mảng buffer. Sốbyte đọc
được tối đa là sức chứa (length) của buffer. Nếu buffercó sức
chứa là 0 thì sẽkhông đọc được gì.
Sau khi đọc xong sẽ trả về số byte đọc được thật sự (nếu đang
đọc mà hết stream thì sốbyte đọc được thật sự sẽ nhỏ hơn sức
chứa của buffer). Nếu stream đã hết mà vẫn đọc nữa thì kết quả
trả về là -1. 54
Các lớp nhập xuất luồng Byte (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các phương thức trong lớp InputStream
int read(byte[]buffer, int
offset, int len)
Đọc một dãy byte và lưu kết quả trong mảng buffer kể tự byte
thứ offset. Số byte đọc được tối đa là len. Nếu len là 0 thì sẽ
không đọc được gì. Sau khi đọc xong sẽ trả về số byte đọc được
thật sự (nếu đang đọc mà hết stream thì sốbyte đọc được thật sự
sẽ nhỏ hơn len). Nếu stream đã hết mà vẫn đọc nữa thì kết quả
trả về là -1.
void reset() Trở lại chỗ đã đánh dấu bằng phương thức mark().
55
Các lớp nhập xuất luồng Byte (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các phương thức trong lớp OutputStream
void close() Đóng stream
void flush() Buộc stream ghi hết dữ liệu trong vùng đệm ra ngoài.
void write(byte[] buffer)
Ghi một dãy byte vào stream. Số byte được ghi sẽ là
buffer.length.
int write(byte[] buffer,
int offset, int len)
Ghi một dãy byte vào stream. Bắt đầu ghi từ byte thứ
offset, và ghi tổng cộng len byte.
abstract void write(int b) Ghi một byte vào stream. Đây là phương thức trừu tượng.
56
Các lớp nhập xuất luồng Byte (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các phương thức trong lớp FileInputStream
FileInputStream(File file)
Tạo FileInputStream để đọc dữ liệu từ một tập tin liên kết tới
đối tượng File
FileInputStream(String
name)
Tạo FileInputStream để đọc dữ liệu từ một tập tin có tên là
name.
57
Các lớp nhập xuất luồng Byte (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các phương thức trong lớp FileOutputStream
FileOutputStream(File file,
boolean append)
Tạo FileOutputStream để ghi dữ liệu tập tin liên kết tới đối
tượng File. Nếu append là true thì sẽ ghi tiếp vào cuối tập tin,
ngược lại thì ghi đè lên tập tin.
FileOutputStream(String
name)
Tạo FileOutputStream để ghi dữ liệu vào một tập tin có tên là
name.
FileOutputStream(String
name, boolean append)
Tạo FileOutputStream để ghi dữ liệu vào một tập tin có tên là
name. Nếu append là true thì sẽ ghi tiếp vào cuối tập tin,
ngược lại thì ghi đè lên tập tin.
58
Các lớp nhập xuất luồng Byte (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các phương thức trong lớp ByteArrayInputStream
ByteArrayInputStream(byte[]
buf)
Tạo ra ByteArrayInputStreamvà dùng buf để làm vùng đệm.
ByteArrayInputStream(byte[]
buf, int off, int len)
Tạo ra ByteArrayInputStream và dùng một phần của buf để
làm vùng đệm.
FileOutputStream(String
name, boolean append)
Tạo FileOutputStream để ghi dữ liệu vào một tập tin có tên là
name. Nếu append là true thì sẽ ghi tiếp vào cuối tập tin,
ngược lại thì ghi đè lên tập tin.
59
Các lớp nhập xuất luồng Byte (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Các phương thức trong lớp ByteArrayOutputStream
ByteArrayOutputStream()
Tạo ra một ByteArrayOutputStream với vùng đệm 32 byte và
có thể tăng nếu cần.
ByteArrayOutputStream(int
size)
Tạo ra một ByteArrayOutputStream với vùng đệm size byte.
byte[] toByteArray() Tạo ra mảng byte là bản sao của vùng đệm của this.
String toString()
Tạo ra chuỗi là bản sao của vùng đệm
của thisvới các byte được đổi thành ký
tựtương ứng.
void writeTo(OutputStream
out)
Ghi dữ liệu trong vùng đệm vào một output stream khác.
60
Ví dụ : FileStream
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
String fileName="C:\\TestB.bin";
// Phát sinh và xuất mảng ngẫu nhiên
byte[]a=new byte[10];
System.out.print("Du lieu phat sinh: ");
for(int i=0;i<a.length;i++)
{
a[i]=(byte)Math.round(Math.random()*20);
System.out.print(a[i]+" ");
}
System.out.println();
// Ghi mảng a vào tập tin
FileOutputStream fo=new FileOutputStream(fileName);
fo.write(a);
fo.close();
61
Ví dụ : FileStream (tt)
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
// Đọc tập tin vào mảng b
FileInputStream fi=new FileInputStream (fileName);
byte[] b=new byte[fi.available()];
fi.read(b);
fi.close();
// Xuất mảng b
System.out.print("Du lieu doc duoc : ");
for(inti=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
System.out.println();
62
Ví dụ : ByteArrayOutputStream
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
import java.io.*;
class LuongXuatMang
{
public static void main(String[] args)
{
try{
//Tao mot luong xuat mang 100 byte
ByteArrayOutputStream os = new ByteArrayOutputStream(100);
//Ghi du lieu vao luong
for(byte i=0;i<100;i++)
os.write(i); //Doc du lieu tu luong vao mang
byte[] b = os.toByteArray();
for(byte i=0;i<100;i++)
System.out.print(b[i]+" ");
os.close();
}catch(IOException e)
{
System.err.println(e); }
}
}
63
Các lớp nhập xuất luồng ký tự
Các luồng ký tự có chức năng đọc hoặc ghi dữ liệu dạng ký tự.
Các luồng nhập ký tự
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
64
Các lớp nhập xuất luồng ký tự (tt)
Các luồng xuất ký tự
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
65
Các lớp nhập xuất luồng ký tự (tt)
Các luồng xuất ký tự Reader :
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
void close() Đóng stream.
void mark(int readlimit)
Đánh dấu vịtrí hiện tại. Nếu sau khi đánh dấu ta đọc quá
readlimit ký tự thì chỗ đánh dấu không còn hiệu lực.
boolean markSupported()
Đọc ký tự kế tiếp trong stream. Quy ước: Trảvề-1 nếu hết
stream. Đây là phương thức trừu tượng.
abstract intread() Trởlại chỗ đã đánh dấu bằng phương thức mark().
int read(char[]cbuf)
Đọc một dãy ký tự và lưu kết quả trong mảng cbuf. Sau khi
đọc xong sẽ trả về số ký tự đọc được thật sự (nếu đang đọc mà
hết stream thì số ký tự đọc được thật sự sẽ nhỏ hơn sức chứa
của cbuf). Nếu stream đã hết mà vẫn đọc nữa thì kết quả trả về
là -1.
66
Các lớp nhập xuất luồng ký tự (tt)
Các luồng xuất ký tự Reader (tt) :
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
int read(char[] cbuf, int
offset, int len)
Đọc một dãy ký tự và lưu kết quả trong mảng cbuf kể từ ký tự
thứ offset. Sau khi đọc xong sẽ trả về số ký tự đọc được thật sự
(nếu đang đọc mà hết stream thì sốký tự đọc được thật sẽ nhỏ
hơn len). Nếu stream đã hết mà vẫn đọc nữa thì kết quả trả về
là
-1.
voidread(CharBuffer target) Đọc một dãy ký tựvà lưu kết quảtrong target.
boolean ready() Trảvề true nếu stream sẵn sàng để đọc.
void reset() Trởlại chỗ đã đánh dấu bằng phương thức mark().
long skip(longn) Bỏqua n ký tự (để đọc các ký tự tiếp sau).
67
Các lớp nhập xuất luồng ký tự (tt)
Các luồng xuất ký tự Writer :
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
Writer append(charc) Nối đuôi ký tự cvào stream.
Writer append(CharSequence csq) Nối đuôi dãy ký tự csqvào stream.
Writer append(CharSequence csq,
int start, int end)
Nối đuôi một phần của dãy ký tự csqvào stream.
void close() Đóng stream.
void flush() Buộc stream ghi hết dữ liệu trong vùng đệm ra ngoài.
void write(char[]cbuf)
Ghi một mảng ký stream. Sốký tự được ghi sẽ
là cbuffer.length.
abstract void write(int c)
Ghi một ký tự vào stream. Đây là phương thức trừu
tượng.
void write(String c) Ghi một chuỗi vào stream
Void write(String str, int off, int len) Ghi một phần của chuỗi vào stream.
68
Các lớp nhập xuất luồng ký tự (tt)
Các phương thức trong lớp FileReader
Các phương thức trong lớp FileWriter
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
FileReader(File file)
Tạo FileReader để đọc dữ liệu từ một tập tin liên kết tới đối
tượng File.
FileReader(String name) Tạo FileReader để đọc dữ liệu từ một tập tin có tên là name.
FileWriter (File file)
Tạo FileWriter để ghi dữ liệu vào một tập tin liên kết tới đối
tượng File.
FileWriter(File file, boolean
append)
Tạo FileWriter để ghi dữ liệu tập tin liên kết tới đối tượng
File. Nếu append là true thì sẽ ghi tiếp vào cuối tập tin, ngược
lại thì ghi đè lên tập tin.
FileWriter(String name) Tạo FileWriter để ghi dữl iệu vào một tập tin có tên là name.
FileWriter(String name,
boolean append)
Tạo FileWriter để ghi dữ liệu vào một tập tin có tên là name.
Nếu append là true thì sẽ ghi tiếp vào cuối tập tin, ngược lại
thì ghi đè lên tập tin.
69
Các lớp nhập xuất luồng ký tự (tt)
Các phương thức trong lớp CharArrayReader
Các phương thức trong lớp CharArrayWriter
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
CharArrayReader(char[]
buf)
Tạo FileReader để đọc dữ liệu từ một tập tin liên kết tới đối
tượng File.
CharArrayReader(char[]
buf, int off, int len)
Tạo ra CharArrayReader và dùng một phần của buf để làm
vùng đệm.
CharArrayWriter() Tạo ra một CharArrayWriter.
CharArrayWriter(int
size)
Tạo ra một CharArrayWriter với vùng đệm size ký tự.
char[] toCharArray() Tạo ra mảng ký tự là bản sao của vùng đệm của this.
String toString()
Tạo ra chuỗi là bản sao của vùng đệm của this với các byte
được đổi thành ký tự tương ứng.
void writeTo(Writer out) Ghi dữ liệu trong vùng đệm vào một writer khác.
70
Các lớp nhập xuất luồng ký tự (tt)
Các phương thức trong lớp StringReader
Các phương thức trong lớp CharArrayWriter
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
StringReader(String s) Tạo ra một StringReader.
StringWriter()
Tạo ra một StringReader, dùng vùng đệm có kích thước mặc
định.
StringWriter(int initialSize)
Tạo ra một StringReader, dùng vùng đệm có kích thước là
initialSize.
StringBuffer getBuffer() Trả về vùng đệm của stream.
71
Ví dụ : file reader và file writer
String fileName="C:\\TestC.txt";
String s="Hello File Reader/Writer!";
System.out.println("Du lieu ban dau : "+s);
// Ghi s vào tập tin
FileWriter fw=new FileWriter(fileName);
fw.write(s);
fw.close();
// Đọc tâp tin vào chuỗi sb
FileReader fr=new FileReader(fileName);
StringBuffer sb=new StringBuffer();
char ca[]=new char[5]; // Đọc mỗi lần tối đa 5 ký tự
while(fr.ready())
{
int len=fr.read(ca); // len: số ký tự đọc được thật sự
sb.append(ca,0,len);
}
fr.close();
// Xuất chuỗi sb
System.out.println("Du lieu doc duoc : "+sb);
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
72
Các luồng lọc dữ liệu (Filter
Stream)
Bởi vì các luồng dữ liệu được chuyển tải dạng byte hoặc ký tự, nên cần có
một bộ biến đổi các luồng dữ liệu này sang những giá trị có định kiểu
khác nhau. Java cung cấp thêm các luồng lọc dữ liệu :
DataInputStream
DataOutputStream
Các luồng này sẽ kết hợp với các luồng khác để lọc ra dữ liệu có định
dạng thích hợp.
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
73
Các luồng lọc dữ liệu (Filter
Stream) (tt)
Các phương thức lớp DataInputStream
Các phương thức lớp DataOutputStream
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
DataInputStream (InputStream in) Tạo stream để đọc dữliệu theo định dạng.
boolean readBoolean()
Đọc một giá trịkiểu boolean.
Các kiểu byte, char, double, float,... cũng có những
phương thức tương ứng.
DataOutputStream
(OutputStream out)
Tạo stream đểghi dữliệu theo định dạng
int size() Trả về số byte mà stream đã ghi.
void writeBoolean(boolean v)
Ghi một biến kiểu boolean. Các kiểu byte, char, double,
float,... cũng có những phương thức tương ứng.
void writeBytes(String s) Ghi chuỗi thành một dãy các byte.
void writeChars(String s) Ghi chuỗi thành một dãy các ký tự.
74
Các luồng lọc dữ liệu (Filter
Stream) (tt) – Ví dụ
String name="C:\\TestD.txt";
// Ghi dữliệu
DataOutputStream fo=new DataOutputStream(new
FileOutputStream(name));
fo.writeBoolean(true);
fo.writeInt(786);
fo.writeFloat(0.123f);
fo.close();
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
75
Các luồng lọc dữ liệu (Filter
Stream) (tt) – Ví dụ
// Đọc dữliệu
DataInputStream fi=new DataInputStream(new
FileInputStream(name));
boolean b=fi.readBoolean();
int i=fi.readInt();
float f=fi.readFloat();
fo.close();
// Xuất dữliệu đọc được ra màn hình
System.out.println("Du lieu doc duoc: ");
System.out.println(String.valueOf(b));
System.out.println(i);
System.out.println(String.valueOf(f));
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
76
Các luồng đệm dữ liệu
Để tăng tốc độ đọc/ghi, nhất là đối với thao tác đọc/ghi trên bộ nhớ
phụ, người ta dùng kỹ thuật vùng nhớ đệm.
Vùng đệm đọc: dữ liệu sẽ được đọc vào vùng đệm thành từng khối, sau đó
lấy ra dùng từ từ, khối hết thì sẽ đọc tiếp khối kế giảm số thao tác đọc.
Vùng đệm ghi: dữliệu cần ghi sẽ được gom lại đến khi đủ số lượng cần thiết
thì sẽ được ghi một lần giảm số thao tác ghi.
Các luồng đệm hỗ trợ đọc và ghi
BufferedInputStream: đọc dữliệu dạng byte, có dùng vùng đệm
BufferedOutputStream: ghi dữliệu dạng byte, có dùng vùng đệm
BufferedReader: đọc dữliệu dạng ký tự, có dùng vùng đệm
BufferedWriter: ghi dữliệu dạng ký tự, có dùng vùng đệm
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
77
Các luồng đệm dữ liệu
Các phương thức của các luồng đệm
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
78
Các luồng đệm dữ liệu
Các phương thức của các luồng đệm
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
79
Các luồng đệm dữ liệu – Ví dụ
String fileName="C:\\TestC.txt";
String s="Hello Buffered File Reader/Writer!";
System.out.println("Du lieu ban dau : "+s);
// Ghi s vào tập tin
BufferedWriter bw=new
BufferedWriter(newFileWriter(fileName));
bw.write(s);
bw.close();
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
80
Các luồng đệm dữ liệu – Ví dụ
// Đọc tâp tin vào chuỗi sb
BufferedReader br=new BufferedReader(new
FileReader(fileName));
StringBuffer sb=new StringBuffer();
char ca[]=new char[5];//Đọc mỗi lần tối đa 5 ký tự
while(br.ready())
{
int len=br.read(ca);//len:số ký tự đọc được thật sự
sb.append(ca,0,len);
}
br.close();
// Xuất chuỗi sb
System.out.println("Du lieu doc duoc : "+sb);
MỘT SỐ VẤN ĐỀ TRONG JAVA
Quản lý luồng nhập xuất
81
LẬP TRÌNH ĐA TUYẾN
Một số chương trình ứng dụng cần xử lý nhiều yêu cầu cùng một lúc. Ví
dụ : một Server cần đáp ứng dữ liệu cho nhiều yêu cầu.
Chương trình ứng dụng cần phải thực hiện xử lý mỗi yêu cầu trên một
tuyến riêng biệt để đảm bảo việc chờ Server thực thi không bị chậm trễ
Ngôn ngữ Java cho phép lập trình đa tuyến trình.
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
82
LẬP TRÌNH ĐA TUYẾN
Một số chương trình ứng dụng cần xử lý nhiều yêu cầu cùng một lúc. Ví
dụ : một Server cần đáp ứng dữ liệu cho nhiều yêu cầu.
Chương trình ứng dụng cần phải thực hiện xử lý mỗi yêu cầu trên một
tuyến riêng biệt để đảm bảo việc chờ Server thực thi không bị chậm trễ
Ngôn ngữ Java cho phép lập trình đa tuyến trình.
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
83
LẬP TRÌNH ĐA TUYẾN (tt)
Lập trình đa tuyến
Một chương trình có thực hiện đa tiến trình cho phép nhiều tiến trình
thực hiện cùng một lúc. Mỗi tiến trình được xử lý bởi một CPU riêng.
Với máy có nhiều CPU (hoặc CPU đa nhân) thì việc xử lý đồng thời
là thật nhưng số lệnh chạy cùng lúc không thể vượt quá số CPU. Khi
đó, việc điều phối xem tiến trình chạy trên CPU nào thông thường
sẽdo HĐH quy định.
Với CPU (đơn nhân) thì chỉcó thể thực thi lệnh một cách tuần tự,
nghĩa là một CPU chỉchạy một lệnh trong một thời điểm. CPU sẽ thực
hiện phương pháp xoay vòng.
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
84
Lớp Thread
Để lập trình đa tiến trình, lớp dẫn xuất từ lớp Thread được cài đặt sau đó
override phương thức run()
Để thực thi một tiến trình, ta gọi phương thức start()
Ví dụ :
public class Main01
{
public static void main(String[]args) {
MyThread t1=new MyThread(); // Tạo tiến trình
MyThread t2=new MyThread();
t1.start(); // Gọi thực thi tiến trình
t2.start();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
85
Lớp Thread (tt)
Class MyThread extends Thread // Kếthừa lớp Thread
{
public void run() // Override phương thức run
{
int i=0;
while(i<200)
{
System.out.println(getName()+" "+i);
i++;
}
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
86
Lớp Thread (tt)
Một số phương thức của lớp Thread
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
Thread() Tạo Thread với giá trịmặc định
Thread(String name) Thread(String name)
Thread(Runnable target) Tạo thread liên kết với đối tượng Runnable
Thread(Runnable target, String
name)
Tạo Thread liên kết với đối tượng Runnable và có tên
cho trước
void setPriority(int n) Thiết lập độ ưu tiên (n từ 1 – 10)
void start() Chạy Thread
void interrupt() Dừng thread
87
Interface Runnable
Nếu không thể tạo class kế thừa từ Thread, ta có thể cho nó implement interface
Runnable. Khi đó, class phải hiện thực phương thức void run() của interface này.
Class MyRunnable implements Runnable {
public void run() { // Cài đặt phương thức run của
Runnable
int i=0;
while(i<200)
{
System.out.println(getName()+" "+i);
i++;
}
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
88
Interface Runnable (tt)
public class Main01
{
public static void main(String[]args)
{
Runnable r1=new MyRunnable(); // Tạo runnable
Runnable r2=new MyRunnable();
Thread t1=new Thread(r1); // Tạo thread liên kết
Thread t2=new Thread(r2); // với runnable
t1.start();
t2.start();
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
89
Đồng Bộ Hóa
Khi các tuyến chạy độc lập có thể sử dụng chung các phương thức hoặc các
đối tượng dữ liệu. Điều này sẽ gây ra sự mất toàn vẹn hoặc sai trong quá trình
tính toán.
Đồng bộ hóa giúp cho các tuyến sử dụng chung phương thức hoặc dữ liệu
không gây ra sự nhập nhằng hoặc sai lệch dữ liệu
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
90
Đồng Bộ Hóa Phương Thức
Sử dụng từ khóa synchronized cho phương thức cần đồng bộ
Class MyThread extends Thread {
public static int x=5;
public static boolean stop=false;
public static /*synchronized*/ voidTrans() {
if(x>0) {
try {
sleep(100);
}
catch(Exception e) {
return;
}
x--;
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
91
Đồng Bộ Hóa Phương Thức
public void run()
{
do
{
Trans();
System.out.println("x = "+x);
}
while(x>0);
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
92
Đồng Bộ Hóa Phương Thức
Kết quả trước
khi đồng bộ
x = 4
x = 3
x = 2
x = 1
x = 0
x = -1
x = -2
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
Kết quả sau khi
đồng bộ
x = 4
x = 3
x = 2
x = 1
x = 0
x = 0
x = 0
93
Đồng Bộ Hóa Dữ Liệu
Sử dụng lệnh
synchronized (expr)
Statement
Ví dụ
public static void abs(int[] v) {
synchronized(v) {
for(int i=0;i<v.length;i++)
{
if(v[i]<0) v[i]=-v[i];
}
}
}
MỘT SỐ VẤN ĐỀ TRONG JAVA
LẬP TRÌNH ĐA TUYẾN
94
Lớp InetAddress
Biểu diễn một địa chỉ Internet bao gồm hai thuộc tính cơ bản:
hostName (String) và address (int[]).
Lớp InetAddress không giống với các lớp khác, không có các
constructor cho lớp InetAddress.
MỘT SỐ VẤN ĐỀ TRONG JAVA 95
Tạo các đối tượng InetAddress
Lớp InetAddress có ba phương thức tĩnh trảvềcác đối tượng
InetAddress
MỘT SỐ VẤN ĐỀ TRONG JAVA 96
Tạo các đối tượng InetAddress
Ví dụ
MỘT SỐ VẤN ĐỀ TRONG JAVA 97
Các thao tác của một đối
tượng InetAddress
Có 2 phương thức chính của đối tượng InetAddres
MỘT SỐ VẤN ĐỀ TRONG JAVA 98
Các thao tác của một đối
tượng InetAddress
Ví dụ : Viết chương trình nhập một tên miền từ đối dòng lệnh và
in ra dòng thông báo cho biết địa chỉ IP tương ứng
MỘT SỐ VẤN ĐỀ TRONG JAVA 99
Các thao tác của một đối
tượng InetAddress
Ví dụ : (tt).
MỘT SỐ VẤN ĐỀ TRONG JAVA 100
Các phương thức kiểm tra
public boolean isReachable(int timeout) throws IOException
Kiểm tra xem một liên kết mạng đã được thiết lập hay chưa. Nếu
host đáp ứng trong khoảng thời gian timeout mili giây, các phương
thức này trả về giá trị true nếu đến được, ngược lại nó trả về giá trị
false.
public boolean isReachable(NetworkInterface netif, int ttl, int
timeout) throws IOException
Kiểm tra có thểtạo kết nối tới địa chỉmạng này hay không bằng cách thực
hiện một ICMP ECHO REQUEST hoặc thiết lập kết nối TCP tới cổng 7 (Echo)
của máy đích.
MỘT SỐ VẤN ĐỀ TRONG JAVA 101
Các phương thức kiểm tra (tt)
public boolean isMulticastAddress()
Kiểm tra có là địa chỉMulticast hay không, true nếu đúng, ngược lại
là false.
public boolean isLoopbackAddress()
Kiểm tra địa chỉnày có là địa chỉloopback không.
public boolean isSiteLocalAddress()
Kiểm tra địa chỉ này có là địa chỉ cục bộ không. Tiện lợi trong việc định
tuyến.
MỘT SỐ VẤN ĐỀ TRONG JAVA 102
Lớp URL
Ngôn ngữJava hỗ trợ việc định vị và lấy dữ liệu thông qua địa chỉ
URL (Uniform Resource Locator) bằng lớp đối tượng URL.
Lớp đối tượng này cho phép chương trình giao tiếp với Server để
lấy dữ liệu về dựa trên các giao thức chuẩn được hỗ trợ bởi
Server.
Lớp URL quản lý các thông tin liên quan đến việc định vị tài
nguyên như sau: giao thức (protocol), tên miền (hostname), cổng
(port), đường dẫn (path), tên tập tin (filename), mục tài liệu
(document section).
Các thông tin này có thểthiết lập độc lập.
MỘT SỐ VẤN ĐỀ TRONG JAVA 103
Tạo đối tượng URL
Có bốn hàm khởi tạo hỗtrợ ứng với các trường hợp khác nhau
của việc cung cấp tham sốvề định vịnguồn tài nguyên URL
MỘT SỐ VẤN ĐỀ TRONG JAVA 104
Tạo đối tượng URL
Ví dụ :
Hoặc
MỘT SỐ VẤN ĐỀ TRONG JAVA
try{
URL u = new URL(“”);
}
catch(MalformedURLException e)
{
System.err.println(e);
}
try{
URL u = new URL(“http”, “/www.sun.com”, “index.html”);
}
catch(MalformedURLException e)
{
System.err.println(e);
}
105
Tạo đối tượng URL
Ví dụ :
Hoặc
MỘT SỐ VẤN ĐỀ TRONG JAVA
try{
URL u = new URL("http","/www.sun.com",80,"index.html");
}
catch(MalformedURLException e){
System.err.println(e);
}
URL u1,u2;
try{
URL u1= new URL("");
URL u2 = new URL(u1,"vendor.html");
}
catch(MalformedURLException e)
{
System.err.println(e);
}
106
Nhận thông tin các thành
phần của URL
URL có sáu trường thông tin trong lớp URL: tên miền, địa chỉIP,
giao thức, cổng, tập tin, mục tham chiếu tài liệu.
MỘT SỐ VẤN ĐỀ TRONG JAVA 107
Nhận dữ liệu từ máy đích
trong URL
Đối tượng URL hỗtrợcác phương thức đểlấy dữliệu từmáy máy
đích về
public final InputStream openStream() throws java.io.IOException
Phương thức này kết nối tới một tài nguyên được tham chiếu bởi một
URL, thực hiện cơ chế bắt tay cần thiết giữa client và server, và trả về
một luồng nhập InputStream. Ta sửdụng luồng này để đọc dữ liệu.
public URLConnection openConnection() throws java.io.IOException
Phương thức openConnection() mở một socket tới một URL xác định
và trả về một đối tượng URLConnection. Một đối tượng
URLConnection biểu diễn một liên kết mở tới một tài nguyên mạng.
MỘT SỐ VẤN ĐỀ TRONG JAVA 108
Nhận dữ liệu từ máy đích
trong URL (tt)
public final Object getContent() throws java.io.IOException
Phương thức getContent() tìm kiếm dữ liệu được tham chiếu bởi một
URL và chuyển nó thành một kiểu đối tượng nào đó.
Ví dụ:Viết chương trình nhập một URL từ bàn phím, kết nối với
Internet và hiển thị mã nguồn của trang Web đó lên màn hình.
Sinh viên tự làm
MỘT SỐ VẤN ĐỀ TRONG JAVA 109
Lớp URLConnection
URLConnection là một lớp trừu tượng biểu diễn một liên kết tới
một tài nguyên được xác định bởi một url. Lớp URLConnection
cung cấp nhiều khả năng điều khiển hơn so với lớp URL thông
qua việc tương tác với một server.
Lớp URLConnection cho phép gởi dữliệu đến Server và đọc
thông tin đáp trả từ Server (tùy thuộc giao thức mà Server đó có
hỗ trợ).
MỘT SỐ VẤN ĐỀ TRONG JAVA 110
Tạo và sử dụng đối tượng
URLConnection
Việc tạo ra đối tượng hiện thực lớp URLConnection bằng phương
thức openConnection của lớp URL.
Để sử dụng lớp URLConnection, thực hiện các bước cơ bản sau:
Xây dựng một đối tượng URL
Gọi phương thức openConnection() của đối tượng URL đểtìm kiếm
một đối tượng URLConnection cho URL đó.
Cấu hình đối tượng URL
Đọc các trường header.
Nhận một luồng nhập và đọc dữliệu.
Nhận một luồng xuất và ghi dữliệu.
Đóng liên kết.
MỘT SỐ VẤN ĐỀ TRONG JAVA 111
Tạo và sử dụng đối tượng
URLConnection
Các phương thức đọc ghi dữ liệu
MỘT SỐ VẤN ĐỀ TRONG JAVA 112
Tạo và sử dụng đối tượng
URLConnection
Đọc thông tin Header
MỘT SỐ VẤN ĐỀ TRONG JAVA 113
Hết Chương 2
Các file đính kèm theo tài liệu này:
- lec_2_mot_so_van_de_trong_lap_trinh_java_1722.pdf