"Szia, Amigo! Ma Ellie mesélt neked az adaptermintáról."

A legtöbb I/O adatfolyamhoz kapcsolódó osztály adapterként van megvalósítva. Vagy konvertálják az egyenértékű interfészt, vagy összekapcsolják őket, kezdve az egyszerűtől a komplexig.

" Az InputStreamReader és a BufferedReader is adapterek? Legalább használatukban nagyon hasonlítanak az adapterekhez: Egy objektum létrehozása után egy másik osztály konstruktorának adják át."

"Igen, az InputStreamReader átalakítja az InputStream interfészt Reader felületté . A BufferedReader nem adapter a legtisztább formájában, mert a Java készítői úgy döntöttek, hogy nem adnak külön felületet a metódusainak. De ez rokon lélek."

Ahelyett, hogy ezernyi különböző osztályt írtak volna, a Java készítői két tucat adaptert írtak, és lehetővé tették, hogy úgy csatlakozzanak egymáshoz, ahogy egy programozó csak akarja.

Ez a megközelítés nagyon kényelmes. A programozó mindig megírhatja az osztályát és/vagy az adapterét, megvalósíthatja egy szabványos interfészt, és belefoglalhatja az általa épített adapterobjektumok láncába.

"Tehát így működik az egész. A nagy összetett osztályok helyett egyszerű objektumok és adapterek láncait készítjük. Aztán csak létrehozza őket, és a megfelelő sorrendben kombinálja őket!"

– És megvalósítod, ami hiányzik.

– Igen, értem.

"De valójában a Readerről és a Writerről akartam ma beszélni . Ez két absztrakt osztály, amelyek nagyon hasonlítanak az InputStream és OutputStream osztályokhoz. De ezekkel az osztályokkal ellentétben ez a két osztály karakterekkel működik. Karaktereket olvasnak és írnak. nagyon kényelmes, ha szöveges információkkal dolgozik. Vessünk egy pillantást a módszereikre:"

Olvasói módszerek Mit csinál a módszer
int read(char[] cbuf);
"Ez a módszer azonnal beolvas több karaktert a pufferbe ( char array ), amíg a puffer meg nem telik, vagy amíg a forrásnak nincs több olvasnivalója."
A metódus a ténylegesen beolvasott karakterek számát adja vissza (amely kevesebb lehet, mint a tömb hossza)
int read();
"Ez a metódus beolvas egy karaktert, és visszaadja. Az eredmény kiszélesítése int-re változik. Ha nincsenek elérhető karakterek, akkor a metódus -1-et ad vissza."
boolean ready();
Ez a metódus igazat ad vissza, ha az olvasási metódusokhoz vannak olvasatlan karakterek
void close();
Ez a módszer „bezárja” a patakot. Ezt akkor hívja, ha végzett az adatfolyammal.
Az objektum ezután elvégzi a fájl bezárásához szükséges háztartási műveleteket stb.
Ezen a ponton nem olvashat több adatot az adatfolyamból.

"Kiderült, hogy a Reader read(char [] cbuf) metódusa lehetővé teszi, hogy egész karakterblokkokat olvassunk el, nem pedig egy karaktert egyszerre. Így gyorsabb és kényelmesebb."

"Pontosan. És most lássuk, milyen módszerekkel rendelkezik Writer:"

Módszer Mit csinál a módszer
void write(int c);
Ez a módszer egy karaktert ír. Az int típus char-ra szűkítve van. A plusz részt egyszerűen eldobjuk.
void write(char[] cbuff);
Ez a módszer egy karaktertömböt ír.
void write(String s);
Ez a módszer egy karakterláncot ír. Egyszerűen karaktertömbbé alakítják, majd a második módszert hívják meg.
void flush();
Ha az adatfolyam belsőleg tárol olyan adatokat, amelyeket még nem írtak meg, ez a módszer kényszeríti az írást.
void close();
Ez a módszer „bezárja” a patakot. Ezt akkor hívja, ha végzett az adatfolyammal.
Az objektum ezután elvégzi a fájl bezárásához szükséges háztartási műveleteket stb. A folyamba már nem írhat adatokat, és a flush automatikusan meghívásra kerül.

Fontos megérteni, hogy az Olvasó és az Író absztrakt osztályok. Nem csinálnak semmit, és gyakorlatilag nem tartalmaznak kódot. Minden metódusukat implementálni kell az őket öröklő osztályokban. Feladatuk az osztályok interakciójának szabványosítása . A fejlesztőknek nem kell saját szabványaikat kitalálniuk az egymással való interakcióhoz. Mindenki számára sokkal kényelmesebb, ha betart néhány alapvető szabványt. Ez lehetővé teszi, hogy a különböző programozók által írt osztályok könnyen interakcióba lépjenek nemcsak a Java alkotói által írt osztályokkal, hanem más programozók által írt osztályokkal is.

A szabványok erősek.

"Egyetértek. A közös normák támogatása mindenki számára előnyös."