nisfarm.ru

Java: InputStream. Vstupní toky

Java, stejně jako mnoho moderních programovacích jazyků, podporuje implementaci datových toků. V jazyce Java je InputStream základní třídou pro proudové byty. Tato třída je abstraktní, to znamená, že v procesu programu nemůžeme vytvořit jeho instanci. V balíčku io však existuje 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 se podíváme na základní funkce, které poskytuje třída InputStream, stejně jako hlavní třídy, které je implementují.

Metody pro třídu InputStream

Předtím, než se přistoupí k podrobnému studiu metod InputStream třídy, je třeba uvést, že se realizuje uzavíratelné a AutoCloseable rozhraní. Rozhraní Uzavřeno nám říká, že při zavírání závitu musí být zavřeno. To se provádí metodou close (). Protože většina z metod třídy InputStream v případě chyby vytváří typ výjimka IOException, všechny operace potřebné k provedení bloku try a metody close () konečně jednotku tak, aby se vypnul v závislosti na výsledku operace, aby se pokusila tělo.

Rozhraní Automatické ukládání výrazně snižuje množství technického kódu, protože umožňuje, aby metoda close () automaticky vypálila a neobsahovala konečný blok kódu. Pokud používáte sedmou nebo novější verzi Java, můžete InputStream umístit do tzv. Zkusit s prostředky, které se starají o všechny operace zavírání.

java vstup do řetězce




Zvažte hlavní metody třídy InputStream:

  • int available () - Vrátí počet bajtů dostupných pro čtení;
  • int read () - převezme ze zdroje aktuální bajt a vrátí jej do celočíselné reprezentace - pokud jsou všechny bajty čteny, vrací -1;
  • int read (byte [] pufr) - Čte bajtů k dispozici v uvedené vyrovnávací paměti ve formě typu byte pole (počet bajtů čtení se rovná předem určené velikosti bufera- vrací počet bajtů, který by mohl prochitat- pokud všechny dostupné bajty číst, vrací -1);
  • int read (byte [] pufr, int offset, počet int bajtů) - přetížení předchozí metody, dělá to samé, ale s určitým „offset“ poloze a čte stejně, jak je uvedeno v „počet bajtů“;
  • (dlouhý počet bajtů) - přeskočí zadaný počet bajtů a vrátí skutečný počet bajtů.

InputStream je implementován několika třídami, které jsou navrženy pro práci s různými zdroji a datovými typy. Strom dědictví je uveden níže.

java vstupní proud

Čtení souborů

Bajtový proud 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 a předat název souboru konstruktoru jako argument. Pokud soubor s daným jménem neexistuje, udělá se výjimka typu FileNotFoundException.

V případě úspěšného otevření souboru se práce s ním provádí metodami popsanými výše, protože FileInputStream je nástupcem InputStreamu.

Č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? Chcete-li to v Javě InputStream nepřímo rozšiřuje třídu DataInputStream. Tato třída je souhrnný InputStream, který je předán k němu při tvorbě jako argument 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 uveden seznam těchto metod.

java io vstupní proud

Názvy metod vyjadřují samy o sobě - ​​každá z nich je určena pro čtení určitého typu dat.

Buffered input stream

Pulzovaný čtecí proud dat je implementován třídou BufferedInputStream v jazyce Java. Vstupní stream je zabalen do této třídy. Tato třída doplňuje tok s vyrovnávací pamětí, která vám umožní číst více než jeden bajt najednou. To umožňuje podstatně zlepšit výkon operace. BufferedInputStream je nepřímým potomkem InputStreamu a v důsledku toho dědí všechny výše uvedené metody.

Tato třída má dva konstruktory:

  • BufferedInputStream (vstupní proud InputStream);
  • BufferedInputStream (vstupní proud InputStream, velikost vyrovnávací paměti int)

Z podpisu konstruktorů můžete pochopit, že první z nich nastavuje velikost vyrovnávací paměti ve výchozím nastavení a ve druhé je možné ji nastavit ručně.

Závěr

Pokryli jsme základní implementaci InputStreamu. Pokud potřebujete konvertovat přijaté bajty do řetězce, pak v Funkce Java InputStream to String (), bohužel, není přetížena, takže pro to budete muset použít speciální nástroje, například IOUtils z knihovny Apache Commons.

Sdílet na sociálních sítích:

Podobné
© 2021 nisfarm.ru