V tomto kurzu se pomocí příkladů dozvíme o Java ByteArrayInputStream a jeho metodách.
ByteArrayInputStream
Třída java.io
obalu může být použita pro čtení pole vstupních dat (v bajtech).
Rozšiřuje InputStream
abstraktní třídu.
Poznámka : V ByteArrayInputStream
, vstupní proud je vytvořen pomocí pole bajtů. Zahrnuje vnitřní pole pro ukládání dat konkrétního bajtového pole.
Vytvořte ByteArrayInputStream
Abychom vytvořili vstupní proud bajtového pole, musíme java.io.ByteArrayInputStream
nejprve importovat balíček. Jakmile importujeme balíček, můžeme vytvořit vstupní proud.
// Creates a ByteArrayInputStream that reads entire array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr);
Zde jsme vytvořili vstupní proud, který čte celá data z arr
pole. Můžeme však také vytvořit vstupní proud, který čte pouze některá data z pole.
// Creates a ByteArrayInputStream that reads a portion of array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr, int start, int length);
Zde vstupní proud čte počet bajtů rovných délce z pole počínaje od počáteční polohy.
Metody ByteArrayInputStream
ByteArrayInputStream
Třída poskytuje implementace pro různé metody prezentovat ve InputStream
třídě.
metoda read ()
read()
- načte jeden bajt z pole přítomného ve vstupním prouduread(byte() array)
- čte bajty ze vstupního proudu a ukládá do zadaného poleread(byte() array, int start, int length)
- načte počet bajtů rovných délce ze streamu a uloží do zadaného pole počínaje od začátku pozice
Příklad: ByteArrayInputStream pro čtení dat
import java.io.ByteArrayInputStream; public class Main ( public static void main(String() args) ( // Creates an array of byte byte() array = (1, 2, 3, 4); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); System.out.print("The bytes read from the input stream: "); for(int i= 0; i < array.length; i++) ( // Reads the bytes int data = input.read(); System.out.print(data + ", "); ) input.close(); ) catch(Exception e) ( e.getStackTrace(); ) ) )
Výstup
Byty načtené ze vstupního proudu: 1, 2, 3, 4,
Ve výše uvedeném příkladu jsme vytvořili vstupní proud bajtového pole s názvem input
.
ByteArrayInputStream input = new ByteArrayInputStream(array);
Zde vstupní proud zahrnuje všechna data ze zadaného pole. K načtení dat ze vstupního proudu jsme použili read()
metodu.
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.ByteArrayInputStream; public class Main ( public static void main(String args()) ( // Creates an array of bytes byte() array = ( 1, 2, 3, 4 ); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + input.available()); // Reads 2 bytes from the input stream input.read(); input.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + input.available()); input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Výstup
Dostupné bajty na začátku: 4 Dostupné bajty na konci: 2
Ve výše uvedeném příkladu
available()
Metodu jsme použili ke kontrole počtu dostupných bytů ve vstupním proudu.- Poté jsme
read()
metodu použili dvakrát ke čtení 2 bajtů ze vstupního proudu. - Nyní po přečtení 2 bajtů jsme zkontrolovali dostupné bajty. Tentokrát se dostupné bajty snížily o 2.
metoda skip ()
Chcete-li zahodit a přeskočit zadaný počet bajtů, můžeme použít skip()
metodu. Například,
import java.io.ByteArrayInputStream; public class Main ( public static void main(String args()) ( // Create an array of bytes byte() array = ( 1, 2, 3, 4 ); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); // Using the skip() method input.skip(2); System.out.print("Input stream after skipping 2 bytes: "); int data = input.read(); while (data != -1) ( System.out.print(data + ", "); data = input.read(); ) // close() method input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Výstup
Vstupní proud po přeskočení 2 bajtů: 3, 4,
Ve výše uvedeném příkladu jsme použili metodu skip () k přeskočení 2 bajtů dat ze vstupního proudu. Proto 1 a 2 nejsou čteny ze vstupního proudu.
metoda close ()
K uzavření vstupního proudu můžeme použít close()
metodu.
Nicméně, close()
způsob má v žádný účinek ByteArrayInputStream
třídy. Metody této třídy můžeme používat i po close()
vyvolání metody.
Další metody ByteArrayInputStream
Metody | Popisy |
---|---|
finalize() | zajišťuje, že je close() metoda volána |
mark() | označí 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 |
markSupported() | zkontroluje, zda vstupní proud podporuje mark() areset() |
Další informace najdete v Java ByteArrayInputStream (oficiální dokumentace Java).