V tomto kurzu se na příkladech dozvíme o prostředí Java BufferedInputStream a jeho metodách.
BufferedInputStream
Třída java.io
balíčku se používá spolu s dalšími vstupními proudy ke čtení dat (v bytech) efektivněji.
Rozšiřuje InputStream
abstraktní třídu.
Práce BufferedInputStream
BufferedInputStream
Udržuje vnitřní vyrovnávací paměti 8192 bajtů .
Během operace čtení BufferedInputStream
je z disku načten kus bajtů a uložen do vnitřní vyrovnávací paměti. A z interní vyrovnávací paměti jsou bajty čteny jednotlivě.
Proto je snížen počet komunikace na disk. Proto je čtení bajtů rychlejší pomocí BufferedInputStream
.
Vytvořte BufferedInputStream
Aby bylo možné vytvořit BufferedInputStream
, musíme java.io.BufferedInputStream
nejprve importovat balíček. Jakmile naimportujeme balíček, můžeme vytvořit vstupní proud.
// Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file);
Ve výše uvedeném příkladu jsme vytvořili BufferdInputStream
pojmenovanou vyrovnávací paměť s FileInputStream
pojmenovaným souborem.
Zde má vnitřní vyrovnávací paměť výchozí velikost 8192 bajtů. Můžeme však také určit velikost vnitřní vyrovnávací paměti.
// Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size);
Vyrovnávací paměť pomůže rychleji číst bajty ze souborů.
Metody BufferedInputStream
BufferedInputStream
Třída poskytuje implementace pro různé metody prezentovat ve InputStream
třídě.
metoda read ()
read()
- načte jeden bajt ze vstupního prouduread(byte() arr)
- čte bajty ze streamu a ukládá je do zadaného poleread(byte() arr, int start, int length)
- načte počet bytů rovný délce ze streamu a uloží do zadaného pole počínaje od začátku pozice
Předpokládejme, že máme soubor s názvem input.txt s následujícím obsahem.
This is a line of text inside the file.
Zkusme soubor přečíst pomocí BufferedInputStream
.
import java.io.BufferedInputStream; import java.io.FileInputStream; class Main ( public static void main(String() args) ( try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream input = new BufferedInputStream(file); // Reads first byte from file int i = input .read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the file i = input.read(); ) input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Výstup
Toto je řádek textu uvnitř souboru.
Ve výše uvedeném příkladu jsme vytvořili vstupní proud s vyrovnávací pamětí s názvem buffer spolu s FileInputStream
. Vstupní proud je propojen se souborem input.txt .
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Zde jsme použili read()
metodu pro načtení pole bajtů z vnitřní vyrovnávací paměti čtečky s vyrovnávací pamětí.
dostupná metoda ()
Chcete-li získat počet dostupných bajtů ve vstupním proudu, můžeme použít available()
metodu. Například,
import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + buffer.available()); // Reads bytes from the file buffer.read(); buffer.read(); buffer.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + buffer.available()); buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Výstup
Dostupné bajty na začátku: 39 Dostupné bajty na konci: 36
Ve výše uvedeném příkladu
- Nejprve pomocí této
available()
metody zkontrolujeme počet dostupných bajtů ve vstupním proudu. - Poté jsme
read()
metodu použili třikrát ke čtení 3 bajtů ze vstupního proudu. - Po přečtení bajtů jsme nyní znovu zkontrolovali dostupné bajty. Tentokrát se dostupné bajty snížily o 3.
metoda skip ()
Chcete-li zahodit a přeskočit zadaný počet bajtů, můžeme použít skip()
metodu. Například,
import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Skips the 5 bytes buffer.skip(5); System.out.println("Input stream after skipping 5 bytes:"); // Reads the first byte from input stream int i = buffer.read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the input stream i = buffer.read(); ) // Closes the input stream buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Výstup
Vstupní proud po přeskočení 5 bajtů: je řádek textu uvnitř souboru.
Ve výše uvedeném příkladu jsme použili skip()
metodu k přeskočení 5 bajtů ze vstupního proudu souboru. Proto, bytů 'T'
, 'h'
, 'i'
, 's'
a ' '
jsou vynechány ze vstupního proudu.
metoda close ()
Chcete-li zavřít vstupní proud s vyrovnávací pamětí, můžeme použít close()
metodu. Jakmile je close()
metoda volána, nemůžeme ke čtení dat použít vstupní proud.
Další metody BufferedInputStream
Metody | Popisy |
---|---|
mark() | označte pozici ve vstupním proudu, do které byla načtena data |
reset() | vrátí ovládací prvek do bodu ve vstupním proudu, kde byla nastavena značka |
Další informace najdete v Java BufferdInputStream (oficiální dokumentace Java).