Bạn sử dụng chúng khi bạn muốn trang trí luồng dữ liệu. Hãy nhớ rằng các cá thể lớp dòng này tự quấn quanh một cá thể dòng khác (cho dù một lớp con khác) và thêm một số tính năng, thêm một số xử lý, thực hiện một số thay đổi đối với dữ liệu khi nó đi qua.
Ví dụ: bạn có thể muốn xóa tất cả không gian khỏi một số luồng. Bạn tạo lớp con của riêng bạn của FilterInputStream và ghi đè phương thức read()
. Tôi sẽ không làm phiền mọi chi tiết nhưng đây là một số sorta-java cho phương pháp trong lớp con:
private boolean lastWasBlank = false;
public int read() {
int chr = super.read();
if (chr == ' ') {
if (lastWasBlank) {
return read();
} else {
lastWasBlank = true;
}
} else {
lastWasBlank = false;
}
return chr;
}
Trong cuộc sống thực, bạn sẽ có thể gây rối với hai read()
phương pháp khác nữa.
Các ứng dụng khác:
- Log tất cả mọi thứ chảy qua các dòng
- Nhân đôi 'tee' tiện ích để dòng được đọc được xử lý theo hai cách.
- Chuyển đổi kết thúc dòng giữa Windows, Mac và các định dạng Unix/Linux
- Thêm chậm trễ để mô phỏng các phương thức truyền chậm như modem hoặc cổng nối tiếp hoặc kết nối mạng không dây.
Nguồn
2013-07-05 18:21:08
OK, nhưng BufferedInputStream và DigestInputStream thực sự làm điều gì đó với luồng cơ bản. FilterInputStream làm gì? – ed22