Java: InputStream. Vstupné toky

Java, rovnako ako mnoho moderných programovacích jazykov, ktoré podporujú implementáciu dátových tokov. V jazyku Java je InputStream základnou triedou pre bajtové toky. Táto trieda je abstraktná, to znamená, že v procese programu nemôžeme vytvoriť jeho kópiu. Avšak balík io má veľa tried, ktoré zdedia a rozširujú funkčnosť InputStream. Ak chcete použiť túto triedu vo svojom kóde, musíte ju importovať z balíka java.io.InputStream. Ďalej sme do úvahy základné funkcie poskytované triedou InputStream, a základné triedy, ktoré ju implementujú.


Trieda Metódy InputStream

Pred tým, než podrobného štúdia spôsobov InputStream triedy, mali by sme si uvedomiť, že sa implementuje rozhranie uzatvárateľné a AutoCloseable. Rozhranie Uzavreté rozhranie nám povie, že keď skončíte prácu s vláknom, musíte ho zavrieť. To sa deje pomocou metódy close (). Vzhľadom k tomu, väčšina metód InputStream triedy v prípade poruchy generuje výnimku typu IOException, by mali byť všetky činnosti vykonávané v bloku try, a metóda close (), aby sa blok a napokon, že to fungovalo bez ohľadu na výsledok telesnej pokus. AutoCloseable interface výrazne znižuje náklady na údržbu kódu, pretože umožňuje metóda close () fungovať automaticky a pridal do svojho bloku kódu nakoniec. Ak použijete siedmu alebo vyšší Java, InputStream môžu byť umiestnené v tzv zdroj vyskúšať všetky operácie uzavrieť prietok prevezme.


Pozrime sa na základné metódy triedy InputStream:
  • int k dispozícii () - vracia čitateľné číslobajtov;
  • int read () - berie zo zdroja aktuálny bajt a vracia ho do celočíselnej reprezentácie; ak sa čítajú všetky bajty, vráti sa -1;
  • int read (byte [] pufor) - číta dostupné bajtov v uvedenom pufri, v poli typu byte (počet čitateľných bajtov rovná zadanej veľkosti vyrovnávacej pamäte, sa vracia počet bajtov na čítanie, a ak sú všetky bajty čítania, vráti -1);
  • int read (byte [] pufer, int offset, počet int bajtov) - preťaženie predchádzajúce metódy robí to isté, ale s je uvedené v polohe "odstránenie" a čítať, rovnako ako je uvedené v "počet bajtov" ;
  • dlhá preskočenia (dlhý počet bajtov) - preskočí zadaný počet bajtov a vráti skutočný počet chýba.
  • InputStream je implementovaný niekoľkými triedami určenými na prácu s rôznymi zdrojmi a dátovými typmi. Nižšie je strom dedičstva.

    Čítanie súborov

    Bajtový tok pre čítanie informácií zo súborov je implementovaný triedou FileInputStream. Ak chcete otvoriť súbor pre čítanie bytov, čo stačí na vytvorenie inštancie tejto triedy tým, že prejde jeho konštruktér názov súboru ako argument. Ak súbor s odoslaným názvom neexistuje, vygeneruje sa výnimka pre typ FileNotFoundException. V prípade úspešného otvorenia súboru sa práca s ním vykonáva pomocou vyššie opísaných metód, pretože FileInputStream je dedičom InputStream.

    Čítanie primitívnych typov údajov

    Predchádzajúci príklad popisuje prácu s hodnotami bajtov, ktoré možno interpretovať ako symboly. Ale čo keď potrebujeme čítať celočíselnú, zlomkovú alebo logickú hodnotu? nato v Java InputStream je nepriamo rozšírené o triedu DataInputStream. Táto trieda je shell pre InputStream, ktorý sa odovzdáva pri vytváraní argumentu konštruktora. Tento druh prúdu číta údaje 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 samy za seba - každý z nich je určený na čítanie určitého typu údajov.

    vyrovnávacej pamäte vstupný prúd

    čítanie dát vyrovnávacej pamäte tok trieda BufferedInputStream realizovaný v jazyku Java. InputStream je shell tejto triedy. Táto trieda dopĺňa prietokový buffer, ktorý vám umožňuje čítať súčasne nie jeden, ale niekoľko bajtov. To umožňuje výrazne zvýšiť výkonnosť operácie. BufferedInputStream je priamy potomok InputStream a preto dedia všetky z vyššie uvedených metód. Táto trieda má dva konštruktory:
  • BufferedInputStream (InputStream vstupný tok);
  • BufferedInputStream (InputStream vstupný prúd, int vyrovnávacej pamäte veľkosť)
  • podpis návrhári môžu pochopiť, že človek nastaví predvolená veľkosť vyrovnávacej pamäte, a druhá je schopnosť je nastaviť ručne.

    Záver

    Skontrolovali sme hlavné implementácie InputStreamu. Ak potrebujete previesť bytov v rade, Java InputStream String (), bohužiaľ, nie je preťažený, tak to bude musieť použiť špeciálnych nástrojov, ako IOUtils knižnice Apache Commons.

    Súvisiace publikácie