/ / Java: InputStream. Vstupné toky

Java: InputStream. Vstupné toky

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ú.

Metódy triedy InputStream

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.

java vstupný prúd do reťazca

Pozrime sa na hlavné metódy triedy InputStream:

  • int available () - vráti počet bajtov dostupných na čítanie;
  • int read () - vezme aktuálny bajt zo zdroja a vráti ho v celočíselnom zastúpení; ak boli prečítané všetky bajty, vráti -1;
  • int read (byte [] buffer) - načíta dostupné bajty dozadaná vyrovnávacia pamäť vo forme poľa typu byte (počet prečítaných bajtov sa rovná veľkosti zadanej vyrovnávacej pamäte; vráti počet prečítaných bajtov; ak sa načítajú všetky dostupné bajty, vráti -1);
  • int čítanie (byte [] buffer, int offset, intpočet bajtov) - preťaženie predchádzajúcej metódy, robí to isté, ale z polohy uvedenej v „offsetu“ a načíta toľko, koľko je uvedené v „počte bajtov“;
  • long skip (long number of bytes) - Preskočí zadaný počet bajtov a vráti skutočný počet preskočených bajtov.

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.

vstupný prúd Java

Čítanie súborov

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.

Čítanie primitívnych dátových typov

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.

java io vstupný prúd

Názvy metód hovoria za všetko - každý z nich je navrhnutý na čítanie konkrétneho typu údajov.

Vstup do vyrovnávacej pamäte

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:

  • BufferedInputStream (vstupný prúd InputStream);
  • BufferedInputStream (vstupný prúd InputStream, veľkosť medzipamäte int)

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.

záver

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.

páčilo sa:
0
Populárne príspevky
Duchovný rozvoj
jedlo
y