Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
400,5 KB
Nội dung
Nguyễn Đức Hiển – Bài giảng Lập trình Java 1 Java Object-Oriented Programming Giảng viên : Nguyễn Đức Hiển Email : ndhien@udn.vn Website : Thời lượng Lý thuyết : 2 tín chỉ (30 tiết) Thực hành + thảo luận : 1 tín chỉ Nguyễn Đức Hiển – Bài giảng Lập trình Java 2 Chương 5 Cácdòngnhập/xuất (Input/Output Streams) Nguyễn Đức Hiển – Bài giảng Lập trình Java 3 Nội dung Khái niệm Dòng bộ đệm Nhập/xuất với tập tin Tuần tự hóa Nguyễn Đức Hiển – Bài giảng Lập trình Java 4 Giới thiệu Dòng (stream) là một sự biểu diễn trừu tượng dữ liệu được kết nối với một số thiết bị vào hay ra Nguyễn Đức Hiển – Bài giảng Lập trình Java 5 Java Stream Hỗ trợ sẵn bộ đệm tự động (buffering) Hỗ trợ sự biểu diễn của cácdòng sử dụng sự trừu tượng hóa mức cao (khác với bytes) Đọc/ghi các kiểu dữ liệu đơn nguyên Đọc/ghi các đối tượng Định dạng sẵn cácdòng ký tự bao gồm sự chuyển đổi qua lại với các biểu diễn khác (như int, double,…) Nguyễn Đức Hiển – Bài giảng Lập trình Java 6 Các lớp stream cơ bản Các lớp stream chính ở trong gói java.io.* Hai lớp trừu tượng chính InputStream int read() int read(byte[] b) int read(byte[] b, int off, int len) OutputStream void write(int b) void write(byte[] b) void write(byte[] b, int off, int len) Cung cấp chức năng cơ bản cho việc đọc dữ liệu đến một luồng theo dạng các byte thô Nguyễn Đức Hiển – Bài giảng Lập trình Java 7 InputStream và OutputStream Nhiều lớp dẫn xuất tồn tại để cung cấp các chức năng chuyên dụng. Các lớp dẫn xuất đáng chú ý: FileInputStream, FileOutputStream BufferedInputStream, BufferedOutputStream ObjectInputStream, ObjectOutputStream PrintStream Và còn nhiều hơn Nguyễn Đức Hiển – Bài giảng Lập trình Java 8 Ví dụ: FileInputStream Ví dụ chương trình đọc dữ liệu từ một tập tin theo từng byte (đọc một byte tại một thời điểm). Nguyễn Đức Hiển – Bài giảng Lập trình Java 9 Cácdòng bộ đệm Ví dụ trước không có hiệu quả bởi vì nó đọc trực tiếp từ file một byte tại một thời điểm chậm Chúng ta có thể dùng lớp BufferedInputStream bao bọc lớp FileInputStream để đọc khối dữ liệu lớn hơn và lưu giữ trong một bộ đệm sử dụng cho việc đọc. Nguyễn Đức Hiển – Bài giảng Lập trình Java 10 Cácdòng bộ đệm File FileInputStream BufferedInputStream Java Program { … … } BufferedInputStream đọc dữ liệu từ file trong các khối lớn và lưu giữ dữ liệu trong một bộ đệm bên trong Bộ đệm Sau đó, bạn có thể đọc dữ liệu từ BufferedInputStream và dữ liệu được đọc từ bộ đệm thay vì trực tiếp từ file trên mỗi lần đọc [...]... Lập trình Java Các dòng File Các đối tượng File có thể được dùng tạo ra các đối tượng dòng như FileInputStream, FileOutputStream, FileReader, hay FileWriter Đơn giản cung cấp đối tượng File vào trong một trong số những phương thức khởi tạo thích hợp Ví dụ: Nguyễn Đức Hiển – Bài giảng Lập trình Java Cácdòng dữ liệu Như đã thấy, cách xử lý cácdòng có thể dòngcác byte hoặc dòngcác ký tự Đôi... ghi dữ liệu tới cácdòng theo dạng của các biến dữ liệu đơn hay toàn bộ đối tượng lớp Lưu thông tin trạng thái chương trình vào một file Gửi các biến dữ liệu cho các luồng (thread), các tiến trình khác nhau hay gửi qua mạng Nhiều ví dụ khác Java có sẵn các lớp dòng tự động kiểm soát việc chuyển đổi thông tin này thành các byte thô cần thiết Nguyễn Đức Hiển – Bài giảng Lập trình Java Các dòng. .. lớp BufferedInputStream bao bọc lớp FileInputStream để đọc dữ liệu từ file: Nguyễn Đức Hiển – Bài giảng Lập trình Java Cácdòng ký tự Thông thường, các thiết bị vào/ra kết hợp với một dòng được biểu diễn như một dãy các ký tự Những tập tin văn bản, dữ liệu vào bằng bàn phím, đầu ra cuối,… Việc xử lý trực tiếp với các byte thô của dữ liệu khi muốn làm việc với văn bản trong Java theo định dạng Unicode... InputStreamReader(System.in)); Nguyễn Đức Hiển – Bài giảng Lập trình Java Cácdòng chuẩn Java cung cấp sẵn cácdòng cho đầu vào, đầu ra, và lỗi chuẩn System.in (InputStream) System.out (PrintStream) System.err (PrintStream) Hai đối tượng System.out và System.err có kiểu PrintStream khá hữu ích cung cấp các cơ chế để in các kiểu dữ liệu cơ sở cũng như chuỗi vào dòng System.in có kiểu InputStream là đối tượng nhập... dữ liệu Java cung cấp hai lớp DataInputStream và DataOutputStream tương ứng cho phép bạn đọc và ghi các kiểu dữ liệu đơn nguyên tới các dòng vào/ra Lớp DataInputStream readByte() readChar() readDouble() readFloat() readInt() … Lớp DataOutputStream có các phương thức write tương ứng Nguyễn Đức Hiển – Bài giảng Lập trình Java Ví dụ Nguyễn Đức Hiển – Bài giảng Lập trình Java Dòng dữ liệu. .. Thông thường, chương trình của chúng ta không chỉ gồm có các kiểu dữ liệu đơn, chúng ta cũng có thể muốn để đọc và ghi các lớp vào các dòng Java cung cấp hai lớp để thực hiện điều này là ObjectInputStream và ObjectOutputStream Các lớp ObjectInputStream và ObjectOutputStream cung cấp chức năng tương tự như DataInputStream và DataOutputStream, ngoại trừ chúng cũng có hỗ trợ để đọc và ghi dữ liệu đối tượng... diện cho chính file! Cung cấp sự hỗ trợ cho các thao tác như kiểm tra nếu một file/thư mục tồn tại, nó là file hay thư mục, kiểm tra quyền truy cập đọc/ghi, tạo và xóa file,… Dùng cho sự tạo các đối tượng dòng file Nguyễn Đức Hiển – Bài giảng Lập trình Java Lớp File Các đối tượng File có thể được tạo cho cả các file lẫn thư mục Cũng hỗ trợ cho các dấu tách đường dẫn Trên Unix tách đường... Reader Writer Nguyễn Đức Hiển – Bài giảng Lập trình Java Reader và Writer Giống như các lớp InputStream và OutputStream, các lớp Reader và Writer cũng có nhiều lớp dẫn xuất Đáng chú ý InputStreamReader Dùng làm lớp bao bọc cho các đối tượng InputStream Chuyển đổi các byte thô khi chúng được đọc từ InputStream thành các ký tự Unicode Ví dụ: FileInputStream fs = new FileInputStream(“Employee.dat”)... trình Java StreamTokenizer Lớp StreamTokenizer cung cấp chức năng tương tự như StringTokenizer ngoại trừ nó mạnh hơn và lấy dữ liệu của nó từ một Reader thay vì một String Theo mặc định nó đoán nhận các số, chuỗi, từ, chú thích, và khoảng trắng như các dấu hiệu (token) Các dấu hiệu có thể được đọc một tại một thời điểm và kiểu của chúng có thể được xác định để xử lý chúng Nguyễn Đức Hiển – Bài... DataOutputStream, ngoại trừ chúng cũng có hỗ trợ để đọc và ghi dữ liệu đối tượng thông qua các phương thức readObject() và writeObject() Nguyễn Đức Hiển – Bài giảng Lập trình Java Sự tuần tự hóa (Serialization) Các đối tượng chỉ có thể được ghi vào một dòng nếu chúng là một kiểu lớp mà hiện thực giao tiếp Serializable Đa số các lớp có sẵn trong Java hiện thực giao tiếp Serializable Serializable không định . của các dòng sử dụng sự trừu tượng hóa mức cao (khác với bytes) Đọc/ghi các kiểu dữ liệu đơn nguyên Đọc/ghi các đối tượng Định dạng sẵn các dòng. trình Java 2 Chương 5 Các dòng nhập/xuất (Input/Output Streams) Nguyễn Đức Hiển – Bài giảng Lập trình Java 3 Nội dung Khái niệm Dòng bộ đệm Nhập/xuất