"Merhaba Amigo! Ellie bugün sana adaptör modelinden bahsetti."

G/Ç akışlarıyla ilgili sınıfların çoğu bağdaştırıcılar olarak uygulanır. Ya eşdeğer arabirimleri dönüştürürler ya da basitten başlayıp karmaşığa doğru ilerleyerek bunları birbirine bağlarlar.

" InputStreamReader ve BufferedReader da bağdaştırıcılar mı? En azından kullanım biçimleri bağdaştırıcılara çok benzer: Bir nesne oluşturulduktan sonra başka bir sınıfın yapıcısına iletilir."

"Evet, InputStreamReader , InputStream arabirimini Reader arabirimine dönüştürür . BufferedReader , en saf haliyle bir bağdaştırıcı değildir, çünkü Java'nın yaratıcıları, yöntemlerine kendi ayrı arabirimlerini vermemeye karar vermiştir. Ama bu, akraba bir ruhtur."

Bazilyonlarca farklı sınıf yazmak yerine, Java'nın yaratıcıları iki düzine bağdaştırıcı yazdı ve bir programcının istediği şekilde birbirlerine bağlanmalarına izin verdi.

Bu yaklaşım çok uygundur. Bir programcı her zaman kendi sınıfını ve/veya bağdaştırıcısını yazabilir, standart bir arabirim uygulamasını sağlayabilir ve onu oluşturmakta olduğu bağdaştırıcı nesneleri zincirine dahil edebilir.

"Demek her şey böyle işliyor. Büyük karmaşık sınıflar yerine, basit nesnelerden ve bağdaştırıcılardan zincirler oluşturuyoruz. Sonra onları oluşturup doğru sırada birleştiriyorsunuz!"

"Ve eksik olanı uygularsın."

"Evet anladım."

"Ama aslında bugün size Reader ve Writer'dan bahsetmek istedim . Bunlar, InputStream ve OutputStream sınıflarına çok benzeyen iki soyut sınıf. metinsel bilgilerle çalışırken çok kullanışlı. Sahip oldukları yöntemlere bir göz atalım:"

Okuyucu yöntemleri Yöntem ne yapar?
int read(char[] cbuf);
"Bu yöntem, arabellek dolana kadar veya kaynakta okunacak başka karakter kalmayıncaya kadar arabelleğe ( char dizisi ) hemen birkaç karakter okur ." Yöntem, gerçekte okunan karakter sayısını döndürür (dizinin uzunluğundan daha az olabilir)
int read();
"Bu yöntem bir karakteri okur ve onu döndürür. Sonuç, görünüm için bir int'ye genişletilir. Kullanılabilir karakter yoksa, yöntem -1 döndürür."
boolean ready();
Bu yöntem, okuma yöntemleri için okunmamış karakterler varsa doğru değerini döndürür.
void close();
Bu yöntem akışı "kapatır". Akışla çalışmayı bitirdiğinizde bunu çağırırsınız.
Nesne daha sonra dosyayı vb. kapatmak için gereken temizlik işlemlerini gerçekleştirir.
Bu noktada, akıştan daha fazla veri okuyamazsınız.

"Reader'ın read(char [] cbuf) yönteminin, her seferinde bir karakter yerine tüm karakter bloklarını okumamıza izin verdiği ortaya çıktı . Bu yüzden daha hızlı ve daha kullanışlı."

"Kesinlikle. Şimdi de Writer'ın hangi yöntemleri kullandığını görelim:"

Yöntem Yöntem ne yapar?
void write(int c);
Bu yöntem bir karakter yazar. int türü bir karaktere daraltılmıştır. Ekstra kısım basitçe atılır.
void write(char[] cbuff);
Bu yöntem bir karakter dizisi yazar.
void write(String s);
Bu metot bir string yazar. Basitçe bir karakter dizisine dönüştürülür ve ardından ikinci yöntem çağrılır.
void flush();
Akış, henüz yazılmamış herhangi bir veriyi dahili olarak depoluyorsa, bu yöntem onu ​​yazılmaya zorlar.
void close();
Bu yöntem akışı "kapatır". Akışla çalışmayı bitirdiğinizde bunu çağırırsınız.
Nesne daha sonra dosyayı vb. kapatmak için gereken temizlik işlemlerini gerçekleştirir. Artık akışa veri yazamazsınız ve yıkama otomatik olarak çağrılır.

Reader ve Writer'ın soyut sınıflar olduğunu anlamak önemlidir . Hiçbir şey yapmazlar ve neredeyse hiç kod içermezler. Tüm yöntemlerinin, onları miras alan sınıflarda uygulanması gerekecektir. Görevleri, sınıfların etkileşimini standart hale getirmektir . Geliştiricilerin birbirleriyle etkileşim kurmak için kendi standartlarını icat etmeleri gerekmez. Birkaç temel standardı korumak herkes için çok daha uygundur. Bu, farklı programcılar tarafından yazılan sınıfların yalnızca Java'nın yaratıcıları tarafından yazılan sınıflarla değil, aynı zamanda diğer programcılar tarafından yazılan sınıflarla da kolayca etkileşim kurmasını sağlar.

Standartlar güçlüdür.

"Katılıyorum. Ortak standartları desteklemek herkesin yararınadır."