1. OutputStream
osztály
Nemrég fedeztük fel a bemeneti adatfolyamokat. Ideje beszélni a kimeneti adatfolyamokról.
Az OutputStream
osztá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 OutputStream
osztá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 int a 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 InputStream
adatokat 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 OutputStream
osztály összes metódusát:
write(int b)
módszer
Ez a metódus egy bájtot (nem egy) ír int
a 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 length
a 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 |
---|---|
|
InputStream fá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. Writer
osztály
Az Writer
osztály pontosan ugyanaz, mint az osztály, de még egyszer csak egy különbség: bájtok helyett OutputStream
karakterekkel ( ) 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.
Writer
Az osztály (és az összes leszármazott osztály) módszerei :
Mód | Leírás |
---|---|
|
Egy karaktert (nem egy ) ír int az 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 offset
változó a tömb első elemének indexét jelöli, és length
az í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 offset
változó a tömb első elemének indexét jelöli, és length
az í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 |
---|---|
|
Reader fá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 |
StringWriter
osztály
Van még egy érdekes osztály, amely örökli az Writer
osztályt: az úgynevezett StringWriter
. Tartalmaz egy változtatható karakterláncot – egy StringBuffer
objektumot. É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 |
---|---|
|
StringWriter Létrejön egy célkarakterfolyam ( ) Egy karakterláncot írnak a pufferbe a karakterláncon belül StringWriter A karakterláncot írják a pufferbe StringWriter egy objektum tartalmának sztringgé konvertálása |
Ebben az esetben az StringWriter
osztály lényegében az osztály feletti burkoló StringBuffer
, de az StringWriter
osztá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