Java: InputStream. Vstupní toky

Java, stejně jako mnoho moderních programovacích jazyků, které podporují implementaci datových toků. V jazyce Java je InputStream základní třída pro tok byte. Tato třída je abstraktní, to znamená, že v průběhu programu nemůžeme vytvořit jeho kopii. Balík io má však mnoho tříd, které dědí a rozšiřují funkci InputStream. Chcete-li tuto třídu použít ve svém kódu, musíte ji importovat z balíčku java.io.InputStream. Dále budeme brát v úvahu základní funkce poskytované třídou InputStream, stejně jako hlavní třídy, které ji implementují.


Třída Metody InputStream

Před tím, než podrobného studia způsobů InputStream třídy, měli bychom si uvědomit, že se implementuje rozhraní uzavíratelné a AutoCloseable. Rozhraní Uzavíratelné nám říká, že když dokončíte práci s vláknem, musíte ho zavřít. To se provádí metodou close (). Vzhledem k tomu, většina metod InputStream třídy v případě poruchy generuje výjimku typu IOException, by měly být všechny činnosti prováděné v bloku try, a metoda close (), aby se blok a konečně, že to fungovalo bez ohledu na výsledek tělesné pokus. AutoCloseable interface výrazně snižuje náklady na údržbu kódu, protože umožňuje metoda close () fungovat automaticky a přidal do svého bloku kódu nakonec. Pokud použijete sedmou nebo vyšší Java, InputStream mohou být umístěny v tzv zdroj vyzkoušet všechny operace uzavřít průtok převezme.


Uvažujme o základních metodách třídy InputStream:
  • int available () - vrátí čitelné číslobajtů
  • int read () - převezme ze zdroje aktuální bajt a vrací jej do celočíselné reprezentace; pokud jsou čteny všechny bajty, vrátí hodnotu -1;
  • int read (byte [] pufr) - čte dostupné bajtů v uvedeném pufru, v poli typu byte (počet čitelných bajtů rovná zadané velikosti vyrovnávací paměti, se vrací počet bajtů ke čtení, a pokud jsou všechny bajty čtení, vrátí -1);
  • int read (byte [] pufr, int offset, počet int bajtů) - přetížení předchozí metody dělá totéž, ale s je uvedeno v poloze „odstranění“ a číst, stejně jak je uvedeno v „počet bajtů“ ;
  • dlouhá přeskočení (dlouhý počet bajtů) - přeskočí zadaný počet bajtů a vrátí skutečný počet chybí.
  • InputStream je implementován několika třídami určenými pro práci s různými zdroji a datovými typy. Níže je strom dědictví.

    Čtení souborů

    Tok bytu pro čtení informací ze souborů je implementován třídou FileInputStream. Chcete-li otevřít soubor pro čtení bajtů, stačí vytvořit instanci této třídy předáním názvu souboru konstruktoru jako argument. Pokud soubor s přeneseným jménem neexistuje, vygeneruje se výjimka pro typ FileNotFoundException. Pokud budou úspěšní otevření souboru, práce na ní se provádí pomocí metod popsaných výše, jako dědic FileInputStream InputStream.

    Čtení primitivních datových typů

    Předchozí příklad popisuje práci s hodnotami bytu, které lze interpretovat jako symboly. Ale co když potřebujeme přečíst celé, částečné nebo logické hodnoty? Prototo v Java InputStream je nepřímo rozšířeno o třídu DataInputStream. Tato třída je shell pro InputStream, který je předán při vytváření argumentu konstruktoru. Tento druh streamu čte data v binární formě.
    DataInputStream také implementuje rozhraní DataInput a jeho metody pro čtení primitivních datových typů. Níže je seznam těchto metod.
    Názvy metod mluví samy za sebe - každá z nich je určena pro čtení určitého typu dat.

    Buffered stream of input

    Buffered data stream je implementován třídou BufferedInputStream v jazyce Java. InputStream je shell této třídy. Tato třída doplňuje vyrovnávací proudění, které vám umožní číst, zatímco ne jeden, ale několik bytů. To umožňuje výrazně zvýšit výkon operace. BufferedInputStream je přímým potomkem InputStream a následně zdědí všechny výše uvedené metody. Tato třída má dva konstruktory:
  • BufferedInputStream (InputStream vstupní proud);
  • BufferedInputStream (InputStream vstupní proud, int vyrovnávací paměti velikost)
  • podpis návrháři mohou pochopit, že člověk nastaví výchozí velikost vyrovnávací paměti, a druhá je schopnost je nastavit ručně.

    Závěr

    Přezkoumali jsme hlavní implementace InputStreamu. Pokud potřebujete převést bytů v řadě, Java InputStream String (), bohužel, není přetížen, tak to bude muset použít speciálních nástrojů, jako IOUtils knihovny Apache Commons.

    Související publikace