Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Các luồng vào ra
Nội dung xem thử
Mô tả chi tiết
Chương 3
Các luồng vào ra
1. Khái niệm về luồng trong Java
Khi lập bất kỳ chương trình nào trong một ngôn ngữ nào thì vấn đề vào ra dữ liệu giữa
chương trình và nguồn dữ liệu cũng như đích dữ liệu là vấn đề mà người lập trình cần phải
quan tâm. Làm thế nào để ta có thể truyền dữ liệu cho một chương trình Java. Có hai cách
hiệu quả để thực hiện điều này:
• Thông qua một tài nguyên tuần tự nào đó như file hoặc qua một máy tính khác.
• Thông qua giao diện người máy.
Mục đích của chương này là xem xét cách truyền dữ liệu cho một chương trình thông
qua một máy tính khác hay tập tin.
1.1. Khái niệm luồng (stream)
Theo nghĩa đen luồng là một đường ống nước.
Về mặt thuật ngữ chuyên ngành ta có thể hiểu “Các luồng là các dãy dữ liệu có sắp
thứ tự”.
Xét trên quan điểm của chương trình và nguồn dữ liệu (Data Soure) ta có thể phân
loại luồng thành hai loại: Luồng xuất (output stream) và luồng nhập (input stream). Để trực
quan hơn chúng ta xem hình vẽ dướ đây:
Hình 3.1
Như vậy nếu chúng ta cần lấy dữ liệu từ nguồn vào chương trình thì cần phải sử dụng luồng
nhập. Ngược lại, nếu ta cần ghi dữ liệu từ chương trình ra nguồn dữ liệu thì ta cần phải sử
dụng luồng xuất.
Ta có thể thấy rằng có rất nhiều luồng dữ liệ, chẳng hạn như từ một tệp tin, từ các thiết bị
xuất và nhập chuẩn, từ liên kết mạng. Như vậy một chương trình có thể truy xuất tới nhiiều
nguồn dữ liệu.
59
InputStream
OutputStream
Program
Data Source
InputStream
OutputStream
Hình 3.2
2. Luồng xuất nhập chuẩn
• System.out: Luồng xuất chuẩn thường được sử dụng để hiển thị kết quả đầu ra trên
màn hình.
• System.in: Luồng nhập chuẩn thường đến từ bàn phím và được sử dụng để hiện các
ký tự.
• System.err: Luồng lỗi chuẩn.
Các luồng trên còn được gọi là các luồng hệ thống. Mặc dù các luồng này rất có ích
khi lập trình nhưng chúng không đủ mạnh khi giải quyết các vấn đề vào ra quan trọng khác.
Trong các mục tiếp theo ta sẽ tìm hiểu sâu một số luồng trong gói java.io
3. Luồnng nhị phân
3.1. Lớp InputStream
Lớp trừu tượng InputStream khai báo các phương thức để đọc dữ liệu đầu vào từ một
nguồn cụ thể. Lớp InputStream là lớp cơ sở của hầu hết các luồng nhập trong gói java.io, và
nó hỗ trợ các phương thức sau:
Các phương thức:
• public InpuStream()
InputStream chỉ hỗ trợ constructor không tham số.
• public abstract int read() throws IOException
Phương thức cơ bản của lớp InputStream là phương thức read(). Phương thức này
đọc một byte dữ liệu từ luồng nhập và trả về một số kiểu nguyên int có giá trị nằm
trong khoảng từ 0 đến 255. Giá trị trả về là -1 khi kết thúc luồng. Phương thức read()
chờ và phong tỏa các đoạn mã sau nó cho tới khi một byte dữ liệu được đọc. Việc
nhập và xuất diễn ra với tốc độ chậm, vì vậy nếu chương trình của ta thực hiện một
công việc khác quan trọng thì tốt nhất là đặt các lệnh nhập xuất vào một tuyến đoạn
riêng của nó. Phương thức read() là phương thức trừu tượng bởi vì các lớp con cần
thay đổi để thích ích với môi trường cụ thể.
• public int read(byte[] b) throws IOException
Phương thức này đọc một dãy các byte dữ liệu liên tục từ một nguồn của luồng nhập
và lưu vào mảng b.
• public int read(byte[] b, int offs, int len) throws IOException
60
Thiết bị
Console
Tệp tin
Mạng
InputStream
OutputStream
Chương trình
ứng dụng