ByteArrayInputStream

All lectures for TK purposes
Dereje , Sapak
Elýeterli

ByteArrayInputStream klası java.io paketinden giriş maglumatlar toplumyny (byte görnüşinde) okamak üçin ulanylyp bilner.

Byte array giriş akymyny döretmek üçin ilki bilen java.io.ByteArrayInputStream paketini import etmeli. Paketi import edenimizden soň, giriş akymyny döretmek üçin iki sany konstruktor bar:


ByteArrayInputStream input = new ByteArrayInputStream(arr);
ByteArrayInputStream input = new ByteArrayInputStream(arr, 2, 2);
    

Klas içinde 4 sany meýdan bar:


// Stream döredijisi tarapyndan üpjün edilen byte topary
protected byte buf[];

// Giriş bufryndan okalan indiki karakteriň indeksi
protected int pos;

// Akımdaky häzirki bellenen pozisiýa
protected int mark = 0;

// Giriş bufryndaky iň soňky rugsat berilen karakterden bir birlik köp bolan indeks
protected int count;
    

Indi konstruktorlarymyz:


public ByteArrayInputStream(byte buf[]) {
    this.buf = buf;
    this.pos = 0;
    this.count = buf.length;
}

public ByteArrayInputStream(byte buf[], int offset, int length) {
    this.buf = buf;
    this.pos = offset;
    this.count = Math.min(offset + length, buf.length);
    this.mark = offset;
}
    

ByteArrayInputStream metodlary

Metod Işleýän iş
int read() Bu giriş akymyndan indiki byte maglumatyny okaýar.
int read(byte b[], int off, int len) Giriş akymyndan birnäçe byte okaýar we olary bufer massiwine b saklaýar.
offb massiwinde başlangyç göçürme.
len – okalan maksimal byte sany.
long skip(long n) Bu giriş akymyndan n byte geçirýär. Geçirilen byte sanyny (eger giriş akymynyň soňuna ýetilse az bolup biler) gaýtarýar.
int available() Bu giriş akymyndan okalyp bilinýän (ýa-da geçirilen) galan byte sanyny gaýtarýar.
void reset() Buferi bellenen pozisiýa yzyna getirýär. Bellige edilen pozisiýa 0-a deň, eger başga pozisiýa bellenmedik bolsa ýa-da konstruktor arkaly başga göçürme görkezilmedik bolsa.
boolean markSupported() Bu InputStream bellemek/reset üçin goldaw berýändigini barlaýar. Gaýtarýar true ByteArrayInputStream.
void close() Hiç zat etmeýär.
void mark(int readAheadLimit) Häzirki pozisiýany mark meýdanynda edýär. Eger reset metodyny çagyrsa, indiki okamak diňe şu pozisiýadan başlar. Metod parametriniň readAheadLimit bahasy onuň işleýşine täsir etmeýär we ulanylmaýar.

Metodlary has giňişleýin öwrenip, olaryň işleşine seretjek.

read()

ByteArrayInputStream içinden adaty InputStream ýaly byte okamak isleseňiz, read() metodyny ulanyp bilersiňiz.


public static void main(String[] args) {
   byte[] array = {1, 2, 3, 4};

   try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
       for (int i = 0; i < array.length; i++) {
           int data = input.read();
           System.out.print(data + ", ");
       }
   } catch (IOException e) {
       e.printStackTrace();
   }
}
    

available()

Eger buferiňizde bir zat bar bolsa, available() metodyny çagyrmak arkaly barlap bilersiňiz.


public static void main(String[] args) {
   byte[] array = {1, 2, 3, 4};

   try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
       System.out.println("okamaga elýeterli byte sany " + input.available());

       input.read();
       System.out.println("okamak üçin boş byte sany " + input.available());

       input.read();
       System.out.println("okamak üçin boş byte sany " + input.available());
   } catch (IOException e) {
       e.printStackTrace();
   }
}
    

Netijede, buferden her gezek okandan soň, okamaga elýeterli byte sanynyň üýtgedilendigini görersiňiz.

Programma çykyşy:

okamaga elýeterli byte sany 4
okamak üçin boş byte sany 3
okamak üçin boş byte sany 2

skip(long n)

skip() metody bilen belli bir sany byte geçirip, olary okamasyz.


public static void main(String[] args) {
   byte[] array = {1, 2, 3, 4};

   try (ByteArrayInputStream input = new ByteArrayInputStream(array)) {
       input.skip(2);

       while (input.available() != 0) {
           int data = input.read();
           System.out.print(data + ", ");
       }
   } catch (IOException e) {
       e.printStackTrace();
   }
}
    

Programma çykyşy:

3, 4,

reset()

Metod buferlenen akymy soňky bellän pozisiýasyna yzyna getirýär. Bellik 0 bolýar, eger başga bellik görkezilmedik bolsa.


public static void main(String[] args) {
   byte[] buf = {65, 66, 67, 68, 69};
   try (ByteArrayInputStream input = new ByteArrayInputStream(buf)) {
       System.out.println("okalan: " + input.read());
       System.out.println("okalan: " + input.read());
       System.out.println("okalan: " + input.read());
       System.out.println("okalan: " + input.read());

       System.out.println("reset() metody çagyrdyk");
       input.reset();
       System.out.println("okalan: " + input.read());
       System.out.println("okalan: " + input.read());
   } catch (IOException e) {
       e.printStackTrace();
   }
}
    

Netijede, reset() metody çagyranymyzdan soň, akymyň başlangyç nokadyna geljekdigini görýäris.

Programma çykyşy:

okalan: 65
okalan: 66
okalan: 67
okalan: 68
reset() metody çagyrdyk
okalan: 65
okalan: 66

mark(int readAheadLimit)

mark() metody ByteArrayInputStream klasynda onuň häzirki byte pozisiýasynda içki bellik goýýar. Bu metod, bu belligiň güýji ýitirilmezden öň, näçe byte okalyp biljekdigini görkezýän bir parametr kabul edýär. Kadaly ýagdaýda, eger bellik aç-açan bellenmedik bolsa, ByteArrayInputStream 0 ýa-da konstruktor aralykda berilen pozisiýany belleýär. Bu klas üçin bellik readAheadLimit hemişe täsirsiz.


/* Note: The {@code readAheadLimit} for this class
*  has no meaning.
*
* @since   1.1
*/
public void mark(int readAheadLimit) {
   mark = pos;
}
    

Bu ýerde ByteArrayInputStream klasynda mark() we reset() metodlarynyň ulanylyş mysalyna seredeliň. Biz öňki mysala mark() metodyny goşarys:


public static void main(String[] args) {
   byte[] buf = {65, 66, 67, 68, 69};
   try (ByteArrayInputStream input = new ByteArrayInputStream(buf)) {
       System.out.println("okalan: " + input.read());
       System.out.println("okalan: " + input.read());
       System.out.println("okalan: " + input.read());
       input.mark(5);

       System.out.println("okalan: " + input.read());
       System.out.println("okalan: " + input.read());

       System.out.println("reset() metody çagyrdyk");
       input.reset();

       System.out.println("okalan: " + input.read());
       System.out.println("okalan: " + input.read());

   } catch (IOException e) {
       e.printStackTrace();
   }
}
    

Netijede, akymyň häzirki pozisiýasynyň dolandyrylýandygyny görýäris.

Programma çykyşy:

okalan: 65
okalan: 66
okalan: 67
okalan: 68
okalan: 69
reset() metody çagyrdyk
okalan: 68
okalan: 69

markSupported()

markSupported() metody bellik açmak üçin goldaw barlaýar. Netijäni nähili alnandygyny görmek üçin metoda seredeliň:


/**
* Tests if this {@code InputStream} supports mark/reset. The
* {@code markSupported} method of {@code ByteArrayInputStream}
* always returns {@code true}.
*
* @since   1.1
*/
public boolean markSupported() {
   return true;
}
    

Bizim metod diňe true gaýtarýar. Muňa mysalda seredeliň:


public static void main(String[] args) {
   byte[] buf = {65, 66, 67, 68, 69};
   try (ByteArrayInputStream bais = new ByteArrayInputStream(buf)) {
       boolean isMarkSupported = bais.markSupported();

       System.out.println("isMarkSupported: " + isMarkSupported);
       System.out.println("okalan: " + bais.read());
       System.out.println("okalan: " + bais.read());

       bais.mark(1);
       System.out.println("okalan: " + bais.read());
       isMarkSupported = bais.markSupported();
       System.out.println("isMarkSupported: " + isMarkSupported);

       bais.reset();
       isMarkSupported = bais.markSupported();
       System.out.println("isMarkSupported: " + isMarkSupported);
   } catch (IOException e) {
       e.printStackTrace();
   }
}
    

Netijede, mark() we reset() metody ulanylandan soň, akymyzyň hemişe goýan belligini ýa-da belgisini goýup biljekdigine görmek mümkin:

Programma çykyşy:

isMarkSupported: true
okalan: 65
okalan: 66
okalan: 67
isMarkSupported: true
isMarkSupported: true

close()

close metody işini düşündirmek üçin içindäki kody barlap göreris:


/**
* Closing a {@code ByteArrayInputStream} has no effect. The methods in
* this class can be called after the stream has been closed without
* generating an {@code IOException}.
*/
public void close() throws IOException {
}
    

Dokumentasiýada ByteArrayInputStream klasynda close metody hiç hili täsir etmeýär diýip aýdylýar. ByteArrayInputStream klasynyň metodlaryny akym ýapylandan soň IOException döredilmezden çagyrmaly.

Näme netijä gelýäris?

ByteArrayInputStream biz byte toparyndan maglumat okamak zerur bolsa, gerekdir. Adatça, bu klasy özbaşdak ulanmak däl-de, InputStream bilen işlemek üçin beýleki kod bilen bilelikde ulanmak düzgündir.

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION