Java, rovnako ako mnoho moderných jazykovprogramovanie, podporuje implementáciu tokov vstupu údajov. V Java je InputStream základnou triedou pre bajtové toky. Táto trieda je abstraktná, to znamená, že keď je program spustený, nemôžeme ho vytvoriť. Balíček io však obsahuje mnoho tried, ktoré zdedia a rozširujú funkčnosť InputStream. Ak chcete túto triedu použiť vo svojom kóde, musíte ju importovať z balíka java.io.InputStream. Ďalej sa pozrieme na základné funkcie, ktoré poskytuje trieda InputStream, ako aj na hlavné triedy, ktoré ju implementujú.
Pred začatím podrobnej štúdiemetód triedy InputStream, treba spomenúť, že implementuje rozhrania Closeable a AutoCloseable. Uzatvárateľné rozhranie nám hovorí, že keď dokončíte prácu so streamom, musí byť zatvorený. To sa deje pomocou metódy close (). Pretože väčšina metód triedy InputStream vyvolá IOException v prípade chyby, všetky operácie sa musia vykonať v bloku try a metóda close () musí byť umiestnená v bloku konečne, aby sa mohla spustiť bez ohľadu na to výsledku práce v skúšobnom tele.
Rozhranie AutoCloseable drasticky klesámnožstvo technického kódu, pretože umožňuje metódu close () spúšťať automaticky a nepridávať do vášho kódu blok konečne. Pokiaľ používate siedmu alebo novšiu verziu Javy, InputStream je možné umiestniť do takzvaného try with resources, ktorý sa postará o všetky operácie na zatváranie streamov.
Pozrime sa na hlavné metódy triedy InputStream:
InputStream je implementovaný v niekoľkých triedach určených na prácu s rôznymi zdrojmi a dátovými typmi. Nižšie je uvedený strom dedičstva.
Bajtový prúd na čítanie informácií zo súborovimplementované triedou FileInputStream. Ak chcete otvoriť súbor na čítanie bajtov, stačí vytvoriť inštanciu tejto triedy a odovzdať jej názov súboru ako argument svojmu konštruktoru. Ak súbor s zadaným názvom neexistuje, bude vyvolaná výnimka typu FileNotFoundException.
Ak je súbor úspešne otvorený, pracuje sa s ním pomocou metód popísaných vyššie, pretože FileInputStream dedí z InputStream.
Predchádzajúci príklad popisoval prácu sbajtové hodnoty, ktoré možno interpretovať ako znaky. Čo však v prípade, keď potrebujeme prečítať celé číslo, zlomok alebo boolovskú hodnotu? Za týmto účelom sa v Jave InputStream nepriamo rozširuje o triedu DataInputStream. Táto trieda je obalom pre InputStream, ktorý sa mu odovzdá, keď sa vytvorí ako argument konštruktora. Tento druh toku číta dáta v binárnej forme.
DataInputStream tiež implementuje rozhranie DataInput a jeho metódy na čítanie primitívnych dátových typov. Nižšie je uvedený zoznam týchto metód.
Názvy metód hovoria za všetko - každý z nich je navrhnutý na čítanie konkrétneho typu údajov.
Implementuje sa dátový tok načítaných údajov do vyrovnávacej pamätetrieda BufferedInputStream v Jave. InputStream je zabalený do tejto triedy. Táto trieda dopĺňa stream o medzipamäť, ktorá umožňuje načítať súčasne nie jeden, ale niekoľko bajtov. To umožňuje výrazne zvýšiť produktivitu operácie. BufferedInputStream je nepriamym potomkom InputStream, a preto dedí všetky vyššie uvedené metódy.
Táto trieda má dvoch konštruktorov:
Z podpisov konštruktérov môžete pochopiť, že prvý nastavuje predvolenú veľkosť medzipamäte, zatiaľ čo druhý má možnosť nastaviť ho ručne.
Pokryli sme hlavné implementácie InputStream. Ak potrebujete previesť prijaté bajty na reťazec, potom v Java InputStream to String (), bohužiaľ, nie je preťažený, takže na to musíte použiť špeciálne nástroje, napríklad IOUtils z knižnice Apache Commons.