"Hej, Amigo! Idag berättade Ellie om adaptermönstret."

De flesta klasser relaterade till I/O-strömmar är implementerade som adaptrar. Antingen konverterar de likvärdiga gränssnitt eller så kopplar de ihop dem, från det enkla och upp till det komplexa.

"Är InputStreamReader och BufferedReader också adaptrar? Åtminstone påminner de mycket om adaptrar på det sätt de används: När ett objekt har skapats skickas det till konstruktören av en annan klass."

"Ja, InputStreamReader konverterar InputStream- gränssnittet till Reader -gränssnittet. BufferedReader är inte en adapter i sin renaste form, eftersom Javas skapare bestämde sig för att inte ge sina metoder ett eget separat gränssnitt. Men det är en släkt."

Istället för att skriva en basillion olika klasser skrev Javas skapare två dussin adaptrar och lät dem ansluta till varandra hur en programmerare än vill.

Detta tillvägagångssätt är mycket bekvämt. En programmerare kan alltid skriva sin klass och/eller adapter, få den att implementera ett standardgränssnitt och inkludera den i kedjan av adapterobjekt hon bygger.

"Så det är så det fungerar. Istället för stora komplexa klasser gör vi kedjor av enkla objekt och adaptrar. Och sedan skapar du dem bara och kombinerar dem i rätt ordning!"

"Och du genomför det som saknas."

"Ja jag förstår."

"Men egentligen ville jag berätta om Reader och Writer idag. Det här är två abstrakta klasser som är väldigt lika InputStream- och OutputStream-klasserna. Men till skillnad från de klasserna arbetar dessa två klasser med karaktärer. De läser och skriver tecken. De är mycket praktiskt när du arbetar med textinformation. Låt oss ta en titt på de metoder de har:"

Läsarmetoder Vad metoden gör
int read(char[] cbuf);
"Denna metod läser omedelbart flera tecken i bufferten ( char array ), tills bufferten är full eller tills källan inte har några fler tecken att läsa."
Metoden returnerar antalet tecken som faktiskt lästs (vilket kan vara mindre än längden på arrayen)
int read();
"Denna metod läser ett tecken och returnerar det. Resultatet breddas till en int för utseende. Om det inte finns några tillgängliga tecken, returnerar metoden -1."
boolean ready();
Denna metod returnerar true om det finns några olästa tecken för läsmetoderna
void close();
Denna metod "stänger" strömmen. Du kallar detta när du är klar med strömmen.
Objektet utför sedan de hushållningsoperationer som behövs för att stänga filen etc.
Vid det här laget kan du inte läsa mer data från strömmen.

"Det visar sig att Readers read(char [] cbuf) -metod låter oss läsa hela block av tecken, snarare än ett tecken åt gången. Så det är snabbare och bekvämare."

"Precis. Och nu ska vi se vilka metoder Writer har:"

Metod Vad metoden gör
void write(int c);
Denna metod skriver ett tecken. Int-typen är avsmalnad till en char. Den extra delen kasseras helt enkelt.
void write(char[] cbuff);
Denna metod skriver en rad tecken.
void write(String s);
Denna metod skriver en sträng. Den konverteras helt enkelt till en uppsättning tecken och sedan anropas den andra metoden.
void flush();
Om strömmen internt lagrar data som ännu inte har skrivits, tvingar den här metoden att skrivas.
void close();
Denna metod "stänger" strömmen. Du kallar detta när du är klar med strömmen.
Objektet utför sedan de hushållningsoperationer som behövs för att stänga filen, etc. Du kan inte längre skriva data till strömmen och tömning anropas automatiskt.

Det är viktigt att förstå att läsare och författare är abstrakta klasser. De gör ingenting och innehåller praktiskt taget ingen kod. Alla deras metoder kommer att behöva implementeras i klasserna som ärver dem. Deras jobb är att standardisera hur klasser interagerar . Utvecklare behöver inte uppfinna sina egna standarder för att interagera med varandra. Det är mycket bekvämare för alla att upprätthålla några grundläggande standarder. Detta gör att klasser skrivna av olika programmerare enkelt kan interagera inte bara med klasser skrivna av Javas skapare, utan också med klasser skrivna av andra programmerare.

Standarder är kraftfulla.

"Jag håller med. Att stödja gemensamma standarder är fördelaktigt för alla."