1. OutputStreamosztály
Nemrég fedeztük fel a bemeneti adatfolyamokat. Ideje beszélni a kimeneti adatfolyamokról.
Az OutputStreamosztály minden olyan osztály szülőosztálya, amely támogatja a bájtkimenetet. Ez egy absztrakt osztály, amely önmagában nem csinál semmit, de minden alkalomra vannak leszármazottai.
Rendkívül bonyolultan hangzik. Egyszerűbben fogalmazva, ez az osztály bájtokkal működik, és nem például karakterekkel vagy más adattípusokkal. Az pedig, hogy elvont, azt jelenti, hogy általában nem használjuk, hanem az egyik leszármazott osztályát. Például FileOutputStreamés hasonlók.
De vissza az OutputStreamosztályhoz. Ennek az osztálynak vannak olyan metódusai, amelyeket az összes leszármazott osztályának implementálnia kell. Íme a főbbek:
| Mód | Leírás |
|---|---|
|
Egy bájtot (nem egy ) ír inta folyamba. |
|
Egy bájttömböt ír az adatfolyamba |
|
Egy bájttömb egy részét írja az adatfolyamba |
|
A pufferben tárolt összes adatot a folyamba írja |
|
Bezárja a patakot |
Amikor olyan osztály objektumát hoz létre, amely örökli a InputStream, akkor általában megad egy forrásobjektumot, amelyből az InputStreamadatokat olvassa be. Amikor olyan osztály objektumát hoz létre, amely örökli a -t OutputStream, általában meg kell adnia azt a célobjektumot vagy adatfolyamot is, amelybe az adatok íródnak.
Nézzük meg röviden az OutputStreamosztály összes metódusát:
write(int b)módszer
Ez a metódus egy bájtot (nem egy) ír inta kimeneti adatfolyamba. Az átadott érték egy bájtba kerül, és az int első három bájtja eldobásra kerül.
write(byte[] buffer)módszer
A megadott bájttömböt írja a kimeneti adatfolyamba. Ez az.
write(byte[] buffer, int offset, int length)módszer
Az átadott bájttömb egy részét a kimeneti adatfolyamba írja. Az offset változó a tömb első elemének indexét jelöli, és lengtha megírandó részhalmaz hosszát.
flush()módszer
A flush()módszer arra szolgál, hogy az aktuális adatfolyamban esetlegesen pufferolt adatokat a céladatfolyamba írják. Ez akkor releváns, ha pufferelést és/vagy több, láncba rendezett adatfolyamobjektumot használ.
close()módszer
Minden íratlan adatot a célobjektumra ír. A close()metódust nem kell meghívni, ha blokkot használ try-with-resources.
Példa egy fájl másolására
| Kód | jegyzet |
|---|---|
|
InputStreamfájlból való olvasáshoz fájlba OutputStreamíráshoz Puffer, amelybe beolvassuk az adatokat Amíg van adat a folyamban Adatok olvasása a pufferbe Írja az adatokat a pufferből a második adatfolyamba |
2. Writerosztály
Az Writerosztály pontosan ugyanaz, mint az osztály, de még egyszer csak egy különbség: bájtok helyett OutputStreamkarakterekkel ( ) működik .char
Ez egy absztrakt osztály: nem hozhat létre objektumokat az osztályból Writer. Fő célja, hogy több száz leszármazott osztály közös szülőosztálya legyen, és közös metódusokat adjon nekik a karakterfolyamokkal való munkához.
WriterAz osztály (és az összes leszármazott osztály) módszerei :
| Mód | Leírás |
|---|---|
|
Egy karaktert (nem egy ) ír intaz adatfolyamba. |
|
Karaktertömböt ír az adatfolyamba |
|
Egy karaktertömb egy részét írja az adatfolyamba |
|
Karakterláncot ír az adatfolyamba |
|
Egy karakterlánc egy részét írja az adatfolyamba |
|
A pufferben tárolt összes adatot a folyamba írja |
|
Bezárja a patakot |
A metódusok nagyon hasonlóak az osztály metódusaihoz OutputStream, de bájtok helyett karakterekkel működnek.
A módszerek leírása:
write(int b)módszer
Ez a metódus egyetlen karaktert ( char— nem an int) ír a kimeneti adatfolyamba. Az átadott érték egy -be kerül char, és az első két bájt eldobásra kerül.
write(char[] buffer)módszer
A megadott karaktertömböt írja a kimeneti adatfolyamba.
write(char[] buffer, int offset, int length)módszer
Az átadott karaktertömb egy részét a kimeneti adatfolyamba írja. A offsetváltozó a tömb első elemének indexét jelöli, és lengthaz írandó részhalmaz hosszát.
write(String str)módszer
A megadott karakterláncot beírja a kimeneti adatfolyamba.
write(String str, int offset, int length)módszer
A megadott karakterlánc egy részét beírja a kimeneti adatfolyamba: a karakterláncot karaktertömbbé alakítja. A offsetváltozó a tömb első elemének indexét jelöli, és lengthaz írandó részhalmaz hosszát.
flush()módszer
A flush()módszer arra szolgál, hogy az aktuális adatfolyamban esetlegesen pufferolt adatokat a céladatfolyamba írják. Ez akkor releváns, ha pufferelést és/vagy több, láncba rendezett adatfolyamobjektumot használ.
close()módszer
Minden íratlan adatot a célobjektumra ír. A close()metódust nem kell meghívni, ha blokkot használ try-with-resources.
Példa egy szöveges fájlt másoló programra:
| Kód | jegyzet |
|---|---|
|
Readerfájlból való olvasáshoz fájlba Writeríráshoz Puffer, amelybe beolvassuk az adatokat Amíg van adat a folyamban Adatok olvasása pufferbe Írja az adatokat a pufferből a második adatfolyamba |
StringWriterosztály
Van még egy érdekes osztály, amely örökli az Writerosztályt: az úgynevezett StringWriter. Tartalmaz egy változtatható karakterláncot – egy StringBufferobjektumot. És minden alkalommal, amikor "ír" valamit az objektumhoz StringWriter, a szöveg egyszerűen hozzáadódik a belső pufferéhez.
Példa:
| Kód | jegyzet |
|---|---|
|
StringWriterLétrejön egy célkarakterfolyam ( ) Egy karakterláncot írnak a pufferbe a karakterláncon belül StringWriterA karakterláncot írják a pufferbe StringWriteregy objektum tartalmának sztringgé konvertálása |
Ebben az esetben az StringWriterosztály lényegében az osztály feletti burkoló StringBuffer, de az StringWriterosztály a stream osztály leszármazottja Writer, és folyam objektumok láncaiban használható. Ez egy nagyon hasznos tulajdonság a gyakorlatban.
GO TO FULL VERSION