Selles õpetuses õpime näidete abil Java ByteArrayInputStreami ja selle meetodeid.
ByteArrayInputStream
Klassi java.io
pakett saab kasutada lugeda massiivi sisendandmed (baitides).
See laiendab InputStream
abstraktset klassi.
Märkus : ByteArrayInputStream
Sisendvoog luuakse baitide massiivi abil. See sisaldab sisemist massiivi selle konkreetse baidimassiivi andmete salvestamiseks.
Looge ByteArrayInputStream
Baidimassiivi sisendvoo loomiseks peame java.io.ByteArrayInputStream
esmalt paketi importima . Kui pakett on imporditud, saame sisendvoo luua järgmiselt.
// Creates a ByteArrayInputStream that reads entire array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr);
Siin oleme loonud sisendvoo, mis loeb arr
massiivilt kogu andmed . Kuid saame luua ka sisendvoo, mis loeb massiivist ainult osa andmeid.
// Creates a ByteArrayInputStream that reads a portion of array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr, int start, int length);
Siin loeb sisendvoog alguspositsioonist algava massiivi pikkusega võrdse baitide arvu.
ByteArrayInputStreami meetodid
ByteArrayInputStream
Tasemega näeb implementation erinevaid meetodeid sisalduse funktsioon InputStream
tasemega.
loe () meetod
read()
- loeb üksikbaiti sisendvoos olevast massiivistread(byte() array)
- loeb sisendivoo baiti ja salvestab määratud massiiviread(byte() array, int start, int length)
- loeb voost pikkusega võrdse baitide arvu ja salvestab määratud massiivi alates positsiooni algusest
Näide: ByteArrayInputStream andmete lugemiseks
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äljund
Sisendivoolust loetud baidid: 1, 2, 3, 4,
Ülaltoodud näites oleme loonud baidimassiivi sisendvoo nimega input
.
ByteArrayInputStream input = new ByteArrayInputStream(array);
Siin sisaldab sisendvoog kõiki määratud massiivi andmeid. Andmete lugemiseks sisendvoost oleme kasutanud read()
meetodit.
saadaval () meetod
Sisendvoos saadaolevate baitide arvu saamiseks saame available()
meetodit kasutada . Näiteks,
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äljund
Alguses saadaolevad baidid: 4 lõpus saadaval olevad baidid: 2
Ülaltoodud näites
- Oleme
available()
meetodi abil kontrollinud saadaolevate baitide arvu sisendvoos. - Seejärel oleme
read()
meetodit 2 korda kasutanud, et lugeda 2 baiti sisendvoost. - Nüüd, pärast 2 baiti lugemist, oleme kontrollinud saadaolevaid baite. Seekord vähenesid saadaolevad baidid 2 võrra.
skip () meetod
Määratud baitide arvu ära viskamiseks ja vahele jätmiseks saame seda skip()
meetodit kasutada . Näiteks,
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äljund
Sisendivoog pärast 2 baiti vahele jätmist: 3, 4,
Ülaltoodud näites oleme kasutanud meetodit skip (), et vahele jätta 2 baiti andmeid sisendvoost. Seega ei loeta sisendvoost 1 ja 2.
close () meetod
Sisendvoo sulgemiseks saame kasutada close()
meetodit.
Kuid klassil close()
pole meetodil mingit mõju ByteArrayInputStream
. Selle klassi meetodeid saame kasutada ka pärast close()
meetodi kutsumist.
Muud ByteArrayInputStreami meetodid
Meetodid | Kirjeldused |
---|---|
finalize() | tagab close() meetodi kutsumise |
mark() | tähistab sisendvoos asukohta, kuhu andmed on loetud |
reset() | tagastab juhtelemendi sisendvoos punkti, kuhu märk oli seatud |
markSupported() | kontrollib, kas sisendvoog toetab mark() jareset() |
Lisateabe saamiseks külastage Java ByteArrayInputStream (ametlik Java dokumentatsioon).