Khái niệm luồng Các luồng byte Đối tượng serializable Các luồng ký tự File truy cập ngẫu nhiên Lớp File Bài tập Luồng là một dòng chảy của dữ liệu được gắn với các thiết bị vào ra. Hai loại luồng: Luồng nhập: gắn với các thiết bị nhập như bàn phím, máy scan, file… Luồng xuất: Gắn với các thiết bị xuất như màn hình, máy in, file… Việc xử lý vào ra thông qua luồng giúp cho lập trình viên không quan tâm đến bản chất của thiết bị vào ra. Luồng byte:Là dòng chảy các byte InputStream: Luồng nhập byte cơ bản OutputStream: Luồng xuất byte cơ bản Luồng ký tự: Là dòng chảy các ký tự (char) Reader: Luồng nhập ký tự cơ bản Writer: Luồng xuất ký tự cơ bản Các lớp luồng nằm trong gói java.io
Chương Streams Overview 1) 2) 3) 4) 5) 6) 7) Khái niệm luồng Các luồng byte Đối tượng serializable Các luồng ký tự File truy cập ngẫu nhiên Lớp File Bài tập Khái niệm luồng (stream) ❚ Luồng dòng chảy liệu gắn với thiết bị vào ❚ Hai loại luồng: ❙ Luồng nhập: gắn với thiết bị nhập bàn phím, máy scan, file… ❙ Luồng xuất: Gắn với thiết bị xuất hình, máy in, file… ❙ Việc xử lý vào thông qua luồng giúp cho lập trình viên khơng quan tâm đến chất thiết bị vào Khái niệm luồng (stream) ❚ Chương trình đọc luồng nhập để lấy liệu từ thiết bị nhập, ghi vào luồng xuất để đưa liệu thiết bị xuất Các luồng ❚ Luồng byte:Là dòng chảy byte ❙ InputStream: Luồng nhập byte ❙ OutputStream: Luồng xuất byte ❚ Luồng ký tự: Là dòng chảy ký tự (char) ❙ Reader: Luồng nhập ký tự ❙ Writer: Luồng xuất ký tự ❚ Các lớp luồng nằm gói java.io Luồng nhập/xuất byte ❚ InputStream OutputStream lớp trừu tượng (abstract) luồng nhập/xuất byte Luồng byte (java.io) Luồng byte (java.io) Lớp InputStream ❚ Một số phương thức InputStream • abstract int read() throws IOException • Đọc byte từ luồng • Nếu cuối luồng trả -1 • int read(byte[] b) throws IOException • Đọc dãy byte từ luồng • void close() throws IOException • Đóng luồng nhập • int available () throws IOException • Trả số byte đọc tiếp • long skip (long n) throws IOException • Bỏ qua n byte Lớp OutputStream ❚ Một số phương thức OutputStream • abstract int write() throws IOException • Ghi byte luồng • int write (byte[] b) throws IOException • Ghi dãy byte luồng • void close() throws IOException • Đóng luồng • int flush () throws IOException • Dồn xuất luồng 10 Luồng nhập/xuất đối tượng ❚ Để lưu lại đối tượng, ta lưu thuộc tính Khi đọc lại đối tượng ta phải tạo đối tượng từ thuộc tính ghi ⇒Dài dòng, linh hoạt • Java hỗ trợ đọc/ghi đối tượng cách đơn giản thông qua lớp ObjectInputStream ObjectOutputStream • Một đối tượng muốn đọc/ghi phải cài đặt giao tiếp java.io.Serializable 27 Đọc ghi đối tượng tự tạo 28 Đọc ghi đối tượng tự tạo 29 Đọc ghi đối tượng tự tạo 30 Đọc ghi đối tượng tự tạo 31 Luồng ký tự • Java hỗ trợ đọc thao tác luồng ký tự Unicode (2 byte) • Luồng ký tự •Reader (đọc) • Writer (ghi) 32 Luồng ký tự 33 Luồng ký tự 34 Kết nối luồng byte luồng ký tự • Có thể chuyển từ luồng byte sang luồng ký tự nhờ lớp • InputStreamReader • OutputStreamReader • Ví dụ: • BufferdReader buff = new BufferedReader( new InputStreamReader(System.in)) • String s = buff.readLine(); •… 35 Luồng ký tự Unicode • Unicode Encoding • UTF-8 • UTF-16 • Đọc ghi file với ký tự Unicode • Kết nối từ luồng: FileInputStream/FileOutputStream vào InputStreamReader/OutputStreamWriter (có thể vào tiếp BufferedReader/BufferWriter) • Chỉ rõ cách encoding 36 Ví dụ: Ghi file Unicode 37 Ví dụ: Ghi file Unicode 38 Lớp File • Lớp File cho phép lấy thơng tin file thư mục • Một số phương thức File • boolean exists(); //Kiểm tra tồn file • boolean isDirectory (); // kiểm tra xem file có phải thư mục • String getParent(); // lấy thư mục cha • long length(); // lấy cỡ file (byte) • long lastModified(); // lấy ngày sửa file gần • String [] list(); // lấy nội dung thư mục 39 Ví dụ: Hiển thị thơng tin file 40 Ví dụ: Hiển thị nội dung thư mục 41