Veri akışını dekore etmek istediğinizde bunları kullanırsınız.
Bu akış sınıfı örneklerinin kendilerini başka bir akış örneğinin etrafına sardıklarını (bunlardan birinin alt sınıfının başka bir alt sınıfı olsun) ekleyeceğini ve bazı özellik eklediğini, biraz işlem eklediğini, verilerin geçtiği sırada bazı değişiklikler yaptıklarını unutmayın. Örneğin, bazı akışlardan tüm çoklu alanları kaldırmak isteyebilirsiniz. Kendi FilterInputStream alt sınıfınızı yapar ve read()
yöntemini geçersiz kılarsınız. Ben alt sınıfta yöntemi için bazı sorta-java tüm ayrıntıları rahatsız edecek ama burada değilim:
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;
}
Gerçek hayatta, olur muhtemelen çok diğer iki read()
yöntemlerle karışıklık.
Diğer kullanımlar: akışı iki şekilde ele alınır okunduğunu böylece
- Günlüğü herşeyi akışına
- akan 'tee' programı çoğaltın.
- Windows, Mac ve Unix/Linux biçimleri arasındaki satır sonlarını dönüştürme
- Modemler veya seri bağlantı noktaları veya kablosuz ağ bağlantıları gibi yavaş iletim yöntemlerini simüle etmek için gecikmeler ekleyin.
Tamam, ancak BufferedInputStream ve DigestInputStream aslında temel akışla bir şeyler yapar. FilterInputStream ne yapar? – ed22