"Hej, Amigo! I dag fortalte Ellie dig om adaptermønsteret."

De fleste klasser relateret til I/O-streams er implementeret som adaptere. De konverterer enten tilsvarende grænseflader, eller de forbinder dem, begyndende fra det enkle og bevæger sig op til det komplekse.

"Er InputStreamReader og BufferedReader også adaptere? I det mindste minder de meget om adaptere i den måde, de bruges på: Efter et objekt er oprettet, videregives det til konstruktøren af ​​en anden klasse."

"Ja, InputStreamReader konverterer InputStream- grænsefladen til Reader- grænsefladen. BufferedReader er ikke en adapter i sin reneste form, fordi Javas skabere besluttede ikke at give dens metoder deres egen separate grænseflade. Men det er en beslægtet ånd."

I stedet for at skrive en bazillion forskellige klasser, skrev Javas skabere to dusin adaptere og tillod dem at oprette forbindelse til hinanden, som en programmør måtte ønske.

Denne tilgang er meget praktisk. En programmør kan altid skrive sin klasse og/eller sin adapter, få den til at implementere en standardgrænseflade og inkludere den i kæden af ​​adapterobjekter, hun bygger.

"Så sådan fungerer det hele. I stedet for store komplekse klasser laver vi kæder af simple objekter og adaptere. Og så laver du dem bare og kombinerer dem i den rigtige rækkefølge!"

"Og du implementerer det, der mangler."

"Ja, jeg forstår det."

"Men faktisk ville jeg fortælle dig om Reader and Writer i dag. Det er to abstrakte klasser, der minder meget om InputStream- og OutputStream-klasserne. Men i modsætning til disse klasser arbejder disse to klasser med tegn. De læser og skriver tegn. De er meget praktisk, når du arbejder med tekstinformation. Lad os tage et kig på de metoder, de har:"

Læsermetoder Hvad metoden gør
int read(char[] cbuf);
"Denne metode læser straks flere tegn ind i bufferen ( char array ), indtil bufferen er fuld, eller indtil kilden ikke har flere tegn at læse."
Metoden returnerer antallet af faktisk læste tegn (som kan være mindre end længden af ​​arrayet)
int read();
"Denne metode læser et tegn og returnerer det. Resultatet udvides til en int for udseende. Hvis der ikke er nogen tilgængelige tegn, returnerer metoden -1."
boolean ready();
Denne metode returnerer sand, hvis der er nogen ulæste tegn for læsemetoderne
void close();
Denne metode «lukker» strømmen. Du kalder dette, når du er færdig med at arbejde med streamen.
Objektet udfører derefter de nødvendige husholdningsoperationer for at lukke filen osv.
På dette tidspunkt kan du ikke læse flere data fra strømmen.

"Det viser sig, at Readers read(char [] cbuf) -metode lader os læse hele blokke af tegn i stedet for ét tegn ad gangen. Så det er hurtigere og mere bekvemt."

"Nøjagtigt. Og lad os nu se, hvilke metoder Writer har:"

Metode Hvad metoden gør
void write(int c);
Denne metode skriver et tegn. Int-typen er indsnævret til en char. Den ekstra del kasseres simpelthen.
void write(char[] cbuff);
Denne metode skriver en række tegn.
void write(String s);
Denne metode skriver en streng. Det konverteres simpelthen til en række tegn, og derefter kaldes den anden metode.
void flush();
Hvis strømmen internt gemmer data, der endnu ikke er blevet skrevet, tvinger denne metode det til at blive skrevet.
void close();
Denne metode «lukker» strømmen. Du kalder dette, når du er færdig med at arbejde med streamen.
Objektet udfører derefter de nødvendige husholdningsoperationer for at lukke filen osv. Du kan ikke længere skrive data til streamen, og flush kaldes automatisk.

Det er vigtigt at forstå, at læser og forfatter er abstrakte klasser. De gør ikke noget og indeholder stort set ingen kode. Alle deres metoder skal implementeres i de klasser, der arver dem. Deres opgave er at standardisere, hvordan klasser interagerer . Udviklere behøver ikke at opfinde deres egne standarder for at interagere med hinanden. Det er meget mere bekvemt for alle at opretholde nogle få grundlæggende standarder. Dette gør det muligt for klasser skrevet af forskellige programmører nemt at interagere ikke kun med klasser skrevet af Javas skabere, men også med klasser skrevet af andre programmører.

Standarder er kraftfulde.

"Jeg er enig. At støtte fælles standarder er gavnligt for alle."