Các dòng filter stream

Một phần của tài liệu Giáo trình lập trình mạng (Trang 33 - 35)

InputStreamOutputStream là các lớp tương đối đơn giản. Các lớp này chỉ thực hiện việc đọc và ghi từng byte hay một nhóm các byte. Việc xác định ý nghĩa của các byte, chẳng hạn như các byte có phải là các số nguyên, là các số thực dấu phảy động IEEE 754 hay là văn bản được mã hóa bằng bảng mã Unicode hoàn toàn phụ thuộc vào người lập trình và mã chương trình. Tuy nhiên có một vài định dạng dữ liệu vô cùng phổ biến đã được cài đặt trong thư viện lớp. Ví dụ, rất nhiều các số nguyên được truyền đi như là các phần của các giao thức mạng là các số nguyên 32 bit big-endian; nhiều văn bản được truyền trên web được mã hóa hoặc là ASCII 7-bit, Latin-1 8-bit, hay UTF-8 multibyte; nhiều file được truyền đi bằng giao thức FTP được lưu trữ dưới định dạng ZIP. Java cung cấp một số lượng các lớp lọc (filter classes) có thể được gắn vào các dòng để dịch các byte thô thành các định dạnh khác.

Các filter được chia thành hai kiểu: các filter stream reader và writer. Filter stream chủ yếu làm việc với các dữ liệu thô như các byte, chẳng hạn như nén dữ liệu hoặc diễn dịch dữ liệu là các số nhị phân. Reader và writer quản lý trường hợp đặc biệt của văn bản trong nhiều cách mã hóa khác nhau như UTF-8 và ISO 8859-1.

Các filter được tổ chức trong một chuỗi (chain). Mỗi liên kết trong chuỗi nhận dữ liệu từ filter trước hoặc từ dòng và truyền dữ liệu đến liên kết kế tiếp trong chuỗi. Sơ đồ sau trình bày chuỗi các filter.

Hình 2.2: Dòng dữ liệu qua một chuỗi các filter

Trong ví dụ trên, một file văn bản đã được mã hóa và được nén được truyền đến thông qua giao diện mạng cục bộ. Mã riêng của chương trình chuyển file này đến TelnetInputStream. Một BufferedInputStream sẽ đưa file vào vùng đệm để tăng tốc toàn bộ quá trình. Một CipherInputStream giải mã dữ liệu và một

GZIPInputStream sẽ giải nén dữ liệu. Một InputStreamReader chuyển đổi dữ liệu đã được giải nén thành file văn bản mã hóa bằng mã Unicode. Cuối cùng, file văn bản đã sẵn sảng cho ứng dụng trong lớp ứng dụng và được xử lý.

Các filter output stream có cùng các phương thức như write(), close()

flush() như java.io.OutputStream. Các filter input stream có cùng các phương thức như read(), close()available() như java.io.InputStream.

Một phần của tài liệu Giáo trình lập trình mạng (Trang 33 - 35)

Tải bản đầy đủ (PDF)

(114 trang)