"Bună, Amigo! Astăzi, Ellie ți-a spus despre modelul adaptorului."

Majoritatea claselor legate de fluxurile I/O sunt implementate ca adaptoare. Fie convertesc interfețe echivalente, fie le conectează, pornind de la simplu și trecând până la complex.

„ InputStreamReader și BufferedReader sunt și adaptoare? Cel puțin, sunt foarte asemănătoare cu adaptoarele în modul în care sunt utilizate: după ce un obiect este creat, acesta este transmis constructorului altei clase.”

"Da, InputStreamReader convertește interfața InputStream în interfața Reader . BufferedReader nu este un adaptor în forma sa cea mai pură, pentru că creatorii Java au decis să nu ofere metodelor sale propria interfață separată. Dar este spirit înrudit."

În loc să scrie o mulțime de clase diferite, creatorii Java au scris două duzini de adaptoare și le-au permis să se conecteze între ele, așa cum ar dori un programator.

Această abordare este foarte convenabilă. Un programator poate oricând să-și scrie clasa și/sau adaptorul, să-i pună în aplicare o interfață standard și să o includă în lanțul de obiecte adaptoare pe care le construiește.

"Deci, așa funcționează totul. În loc de clase mari complexe, facem lanțuri de obiecte și adaptoare simple. Și apoi le creați și le combinați în ordinea corectă!"

„Și tu implementezi tot ce lipsește”.

"Da, inteleg."

„Dar, de fapt, am vrut să vă spun despre Reader și Writer astăzi. Acestea sunt două clase abstracte care sunt foarte asemănătoare cu clasele InputStream și OutputStream. Dar, spre deosebire de acele clase, aceste două clase lucrează cu caractere. Citesc și scriu caractere. Sunt foarte convenabil atunci când lucrați cu informații textuale. Să aruncăm o privire la metodele pe care le au:"

Metode de citire Ce face metoda
int read(char[] cbuf);
„Această metodă citește imediat mai multe caractere în buffer ( matrice de caractere ), până când memoria tampon este plină sau până când sursa nu mai are caractere de citit.”
Metoda returnează numărul de caractere citite efectiv (care poate fi mai mică decât lungimea matricei)
int read();
"Această metodă citește un caracter și îl returnează. Rezultatul este extins la un int pentru aspect. Dacă nu există caractere disponibile, atunci metoda returnează -1."
boolean ready();
Această metodă returnează true dacă există caractere necitite pentru metodele de citit
void close();
Această metodă „închide” fluxul. Numiți asta când ați terminat de lucrat cu fluxul.
Obiectul efectuează apoi operațiunile de întreținere necesare închiderii fișierului etc.
În acest moment, nu mai puteți citi date din flux.

„Se pare că metoda read(char [] cbuf) de la Reader ne permite să citim blocuri întregi de caractere, mai degrabă decât un caracter la un moment dat. Deci, este mai rapid și mai convenabil.”

"Exact. Și acum să vedem ce metode are Writer:"

Metodă Ce face metoda
void write(int c);
Această metodă scrie un caracter. Tipul int este restrâns la un caracter. Partea suplimentară este pur și simplu aruncată.
void write(char[] cbuff);
Această metodă scrie o matrice de caractere.
void write(String s);
Această metodă scrie un șir. Este pur și simplu convertit într-o matrice de caractere și apoi este apelată a doua metodă.
void flush();
Dacă fluxul stochează intern orice date care nu au fost încă scrise, această metodă forțează să fie scrisă.
void close();
Această metodă „închide” fluxul. Numiți asta când ați terminat de lucrat cu fluxul.
Obiectul efectuează apoi operațiunile de întreținere necesare pentru a închide fișierul etc. Nu mai puteți scrie date în flux, iar fluxul este apelat automat.

Este important să înțelegeți că Reader și Writer sunt clase abstracte. Nu fac nimic și practic nu conțin cod. Toate metodele lor vor trebui implementate în clasele care le moștenesc. Sarcina lor este să standardizeze modul în care interacționează clasele . Dezvoltatorii nu trebuie să-și inventeze propriile standarde pentru a interacționa între ei. Este mult mai convenabil pentru toată lumea să mențină câteva standarde de bază. Acest lucru permite claselor scrise de diferiți programatori să interacționeze cu ușurință nu numai cu clasele scrise de creatorii Java, ci și cu clasele scrise de alți programatori.

Standardele sunt puternice.

„Sunt de acord. Sprijinirea standardelor comune este benefică pentru toată lumea”.