Mga computerProgramming

Java: InputStream. Mga Stream ng Input

Ang Java, tulad ng maraming mga modernong programming language, ay sumusuporta sa pagpapatupad ng mga stream ng data entry. Sa Java, ang InputStream ay ang pangunahing klase para sa mga stream ng byte. Ang klase na ito ay abstract, iyon ay, sa proseso ng programa hindi namin maaaring lumikha ng halimbawa nito. Gayunpaman, sa io pakete, mayroong maraming mga klase na magmana at pahabain ang pag-andar ng InputStream. Upang gamitin ang klase sa iyong code, kailangan mong i-import ito mula sa java.io.InputStream pakete. Susunod, titingnan natin ang pangunahing pag-andar na ibinigay ng klase ng InputStream, pati na rin ang mga pangunahing klase na nagpapatupad nito.

Mga pamamaraan para sa klase ng InputStream

Bago magpatuloy sa isang detalyadong pag-aaral ng mga pamamaraan ng klase ng InputStream, dapat itong banggitin na ipinapatupad nito ang mga interface na Closeable at AutoCloseable. Sinasabi sa atin ng Closeable interface na kapag isinasara ang thread, dapat itong sarado. Ginagawa ito gamit ang close () method. Dahil ang karamihan sa mga pamamaraan ng klase ng InputStream ay bumubuo ng isang eksepsiyon ng uri ng IOException sa kaganapan ng isang error, ang lahat ng mga operasyon ay dapat na isagawa sa try block, at ang paraan ng close () ay dapat na i-render sa huling block upang magtrabaho nang walang kinalaman sa resulta ng trabaho sa try body.

Ang AutoCloseable interface ay makabuluhang binabawasan ang halaga ng teknikal na code, dahil pinapayagan nito ang close () na paraan upang sunugin ang awtomatiko at hindi magdagdag ng huli na i-block sa iyong code. Kung ikaw ay gumagamit ng isang ikapitong o mas bagong bersyon ng Java, maaari mong ilagay ang InputStream sa isang tinatawag na subukan na may mga mapagkukunan, na tumatagal ng pag-aalaga ng lahat ng mga pagsasara ng mga operasyon.

Isaalang-alang ang mga pangunahing pamamaraan ng klase ng InputStream:

  • Int available () - Ibinabalik ang bilang ng mga byte na magagamit para sa pagbabasa;
  • Int read () - tumatagal mula sa mapagkukunan ng kasalukuyang byte at ibabalik ito sa representasyon ng integer; Kung basahin ang lahat ng mga byte, babalik -1;
  • Int read (byte [] buffer) - binabasa ang magagamit na mga byte sa tinukoy na buffer bilang isang array ng uri byte (ang bilang ng mga byte na binabasa ay katumbas ng laki ng tinukoy na buffer, nagbabalik ng bilang ng mga byte na nabasa, nagbabalik -1 kung ang lahat ng magagamit na mga byte ay nababasa);
  • Ang int read (byte [] buffer, int offset, int bilang ng mga bytes) - Sobra ng nakaraang pamamaraan, ay pareho, ngunit sa posisyon na tinukoy sa "offset" at bumabasa ng maraming bilang tinukoy sa "bilang ng mga byte";
  • Long skip (mahaba ang bilang ng mga byte) - skips ang tinukoy na bilang ng mga byte at babalik ang aktwal na bilang ng mga byte.

Ang InputStream ay ipinatupad ng maraming klase, na dinisenyo upang magtrabaho kasama ang iba't ibang mga mapagkukunan at mga uri ng data. Ang puno ng mana ay iniharap sa ibaba.

Pagbabasa ng Mga File

Ang byte stream para sa pagbabasa ng impormasyon mula sa mga file ay ipinatupad ng klase ng FileInputStream. Upang buksan ang file para sa pagbabasa ng bytes, sapat na upang lumikha ng isang halimbawa ng klase na ito, na pinapasa ang pangalan ng file sa tagapagbuo bilang argumento. Kung ang file na may ibinigay na pangalan ay hindi umiiral, ang isang pagbubukod ng uri ng FileNotFoundException ay itatapon.

Sa kaso ng isang matagumpay na pagbubukas ng isang file, gumagana sa mga ito ay ginanap gamit ang mga pamamaraan na inilarawan sa itaas, dahil ang FileInputStream ay ang kahalili ng InputStream.

Binabasa ang mga uri ng primitive na data

Ang nakaraang halimbawa ay naglalarawan ng pagtatrabaho sa mga halaga ng byte na maaaring ipakahulugan bilang mga simbolo. Ngunit ano kung kailangan naming basahin ang isang integer, fractional o lohikal na halaga? Para sa mga ito, sa Java InputStream ay hindi direkta pinalawak ng klase ng DataInputStream. Ang klase na ito ay ang wrapper para sa InputStream, na ipinasa dito kapag ito ay nilikha bilang argumento sa tagapagbuo. Binabasa ng ganitong uri ng stream ang data sa binary form.

Nagpapatupad din ang DataInputStream ng interface ng DataInput at mga pamamaraan nito para sa pagbabasa ng mga uri ng primitive na data. Nasa ibaba ang isang listahan ng mga pamamaraan na ito.

Ang mga pangalan ng mga pamamaraan ay nagsasalita para sa kanilang sarili - bawat isa sa kanila ay inilaan para sa pagbabasa ng isang tiyak na uri ng data.

Buffered stream ng input

Ang buffered data read stream ay ipinatupad ng klase ng BufferedInputStream sa Java. Ang inputStream ay nakabalot sa klase na ito. Pinagsasama ng klase ang daloy na may buffer, na nagbibigay-daan sa iyo na magbasa ng higit sa isang byte sa isang pagkakataon. Ginagawang posible na makabuluhang mapabuti ang pagganap ng operasyon. Ang BufferedInputStream ay isang hindi direktang inapo ng InputStream at, ayon dito, nagmamana ng lahat ng mga pamamaraan sa itaas.

Ang klase na ito ay mayroong dalawang tagapagbuo:

  • BufferedInputStream (InputStream input stream);
  • BufferedInputStream (InputStream input stream, int buffer size)

Mula sa lagda ng constructors, maaari mong maunawaan na ang unang isa ay nagtatakda ng default na laki ng buffer, at sa pangalawang isa posibleng itakda ito nang mano-mano.

Konklusyon

Sinuri namin ang mga pangunahing pagpapatupad ng InputStream. Kung kailangan mong i-convert ang natanggap na bytes sa isang string, pagkatapos ay sa Java InputStream sa String (), sa kasamaang-palad, ay hindi overloaded, kaya para sa mga ito kailangan mong gumamit ng mga espesyal na kagamitan, halimbawa IOUtils mula sa Apache Commons library.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 tl.atomiyme.com. Theme powered by WordPress.