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.

pdf114 trang | Chia sẻ: nguyenlam99 | Lượt xem: 1316 | Lượt tải: 0download
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:

  • pdflec_2_mot_so_van_de_trong_lap_trinh_java_1722.pdf
Tài liệu liên quan