/ / Java: InputStream. Bemeneti adatfolyamok

Java: InputStream. Bemeneti adatfolyamok

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.

java inputstream a karakterláncba

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.

java inputstream

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.

java io inputstream

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.