Java, mint sok modern nyelvprogramozás, támogatja az adatbeviteli streamek megvalósítását. A Java-ban az InputStream a bájtfolyamok alapkategóriája. Ez az osztály elvont, vagyis a program folyamatában nem hozhatunk létre egy példányt. Az io csomagnak azonban számos olyan osztálya van, amelyek öröklik és kiterjesztik az InputStream funkcióit. Az osztály használatához a kódban importálnia kell a java.io.InputStream csomagból. Ezután megvizsgáljuk az InputStream osztály által biztosított alapvető funkciókat, valamint az azt megvalósító fő osztályokat.
Az InputStream osztály módszerei
Mielőtt elkezdené a részletes tanulmánytAz InputStream osztály módszereivel kapcsolatban meg kell említeni, hogy megvalósítja a Bezárható és az AutoCloseable felületeket. A Bezárható felület azt mondja nekünk, hogy amikor befejezte a patak használatát, be kell zárnia. Ez a close () módszerrel történik. Mivel az InputStream osztály legtöbb metódusa hiba esetén IOException-et dob, minden műveletet a próbablokkban kell végrehajtani, és a close () metódust be kell helyezni az utolsó blokkba, hogy az a próbatestben végzett munka eredményétől függetlenül működjön.
Az AutoCloseable felület jelentősen csökkentechnikai kód, mert lehetővé teszi a close () metódus automatikus indítását, és nem ad hozzá végleges blokkot a kódhoz. Ha a Java hetedik vagy újabb verzióját használja, akkor az InputStream elhelyezhető az úgynevezett próbálkozás erőforrásokkal alatt, amely gondoskodik a szálak bezárásának minden műveletéről.
Vegyük figyelembe az InputStream osztály alapvető módszereit:
- int available () - az olvasásra rendelkezésre álló bájt számot adja vissza;
- int read () - az aktuális bájtot veszi az erőforrásból és egész számban adja vissza; ha minden bájt kiolvasásra kerül, akkor -1 értéket ad vissza;
- int olvasás (bájt [] puffer) - a rendelkezésre álló bájtot aa megadott puffer mint egy típusú bájt tömbje (az elolvasott bájtok száma megegyezik a megadott puffer méretével; visszaadja az olvasni képes bájtok számát; ha az összes rendelkezésre álló bájt kiolvasásra kerül, -1-et ad vissza);
- int olvasás (byte [] puffer, int eltolás, intbájtok száma) - az előző módszer túlterhelése, ugyanezt teszi, de az "eltolásban" megjelölt pozícióból, és annyira olvassa, amennyit a "bájtok száma" megjelöl;
- hosszú átugrás (hosszú bájtszám) - átugorja a megadott számú bájtot, és visszaadja a kihagyott bájtok tényleges számát.
Az InputStream több osztályban valósul meg, amelyek célja a különböző források és adattípusok kezelése. Az alábbiakban látható az öröklési fa.
Fájlok olvasása
Bájt adatfolyam az adatok olvasásához a fájlokbóla FileInputStream osztály által megvalósított. A fájl megnyitásához bájtok olvasásához elegendő egy osztály példányát létrehozni, és nevét argumentumként átadja a konstruktornak. Ha az átadott névvel rendelkező fájl nem létezik, akkor a FileNotFoundException típus kivételét dobják el.
Sikeres fájl megnyitás esetén a munkát a fent leírt módszerekkel kell elvégezni, mivel a FileInputStream az InputStream örököse.
Primitív adattípusok olvasása
Az előző példa leírja a munkátbájtértékek, amelyek karakterekként értelmezhetők. De mi van, ha egész számot, tört vagy logikai értéket kell olvasnunk? Ehhez a Java-ban egy InputStream-et közvetett módon kiterjeszti a DataInputStream osztály. Ez az osztály egy InputStream burkolója, amelyet átadnak neki, amikor argumentumként készülnek a konstruktor számára. Ez a fajta adat bináris formában olvassa le az adatokat.
A DataInputStream a DataInput felületet és annak módszereit is végrehajtja primitív adattípusok leolvasására. Az alábbiakban felsoroljuk ezeket a módszereket.
A módszerek neve magukért beszél - mindegyiket egy bizonyos típusú adat olvasására tervezték.
Pufferelt bemeneti adatfolyam
A pufferolt adatolvasási adatfolyam megvalósítva.a BufferedInputStream osztály Java-ban. Ez az osztály beilleszt egy InputStream-et. Ez az osztály kiegészíti az adatfolyamot egy pufferrel, amely nem egyszerre, hanem több bájt olvasását teszi lehetővé. Ez lehetővé teszi a művelet termelékenységének jelentős növelését. A BufferedInputStream az InputStream közvetett leszármazottja, és ennek megfelelően örökli a fenti módszereket.
Ez az osztály két konstruktorral rendelkezik:
- BufferedInputStream (InputStream bemeneti adatfolyam);
- BufferedInputStream (InputStream bemeneti adatfolyam, int pufferméret)
A tervezők aláírása alapján megértheti, hogy az első az alapértelmezett pufferméretet állítja be, a második pedig manuálisan állítja be.
következtetés
Megvizsgáltuk az InputStream fő megvalósításait. Ha a kapott bájtot karakterlánkká kell konvertálnia, akkor az Sajnos a Java InputStream to String () nem túlterhelt, ezért speciális segédprogramokat kell használnia, például az Apache Commons könyvtár IOUtils programját.