Java ByteArrayInputStream (koos näidetega)

Selles õpetuses õpime näidete abil Java ByteArrayInputStreami ja selle meetodeid.

ByteArrayInputStreamKlassi java.iopakett saab kasutada lugeda massiivi sisendandmed (baitides).

See laiendab InputStreamabstraktset klassi.

Märkus : ByteArrayInputStreamSisendvoog luuakse baitide massiivi abil. See sisaldab sisemist massiivi selle konkreetse baidimassiivi andmete salvestamiseks.

Looge ByteArrayInputStream

Baidimassiivi sisendvoo loomiseks peame java.io.ByteArrayInputStreamesmalt 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 arrmassiivilt 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

ByteArrayInputStreamTasemega näeb implementation erinevaid meetodeid sisalduse funktsioon InputStreamtasemega.

loe () meetod

  • read() - loeb üksikbaiti sisendvoos olevast massiivist
  • read(byte() array) - loeb sisendivoo baiti ja salvestab määratud massiivi
  • read(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

  1. Oleme available()meetodi abil kontrollinud saadaolevate baitide arvu sisendvoos.
  2. Seejärel oleme read()meetodit 2 korda kasutanud, et lugeda 2 baiti sisendvoost.
  3. 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).

Huvitavad Artiklid...