Java: InputStream. Įvesties srautai
Java, kaip ir daugelis šiuolaikinių kalbųprogramavimas, palaiko duomenų įvedimo srautų įgyvendinimą. "Java" InputStream yra baitų srautų bazinė klasė. Ši klasė yra abstrakt, tai yra, programos metu mes negalime sukurti jo pavyzdžio. Tačiau io paketu yra daugybė klasių, kurios paveldi ir išplečia InputStream funkcionalumą. Norėdami naudoti šią klasę savo kodą, ją reikia importuoti iš java.io.InputStream paketo. Toliau mes pažvelgsime į pagrindines funkcijas, kurias teikia InputStream klasė, taip pat pagrindines klases, kurios jį įgyvendina.
InputStream klasės metodai
Prieš pradedant išsamų tyrimąInputStream klasės metodai, reikėtų paminėti, kad ji įgyvendina uždaroma ir AutoCloseable sąsajas. Sąsaja uždaroma pasakoja, kad ties darbu su juo srauto užbaigimo nebūtinai turi būti uždarytos. Tai atliekama naudojant metodą close (). Kadangi dauguma InputStream klasės metodų atveju klaidos sukuria išimtis tipo IOException, visas operacijas, reikalingas atlikti pabandyti blokas ir metodas Uždaryti () pagaliau padaryti įrenginį taip, kad jis suveikė, priklausomai nuo operacijos išbandyti kūną.
AutoCloseable sąsaja gerokai sumažėjatechninio kodo dydis, nes jis leidžia uždaryti () metodą dirbti automatiškai, o ne į savo kodą įterpti galutinį bloką. Jei naudojate septintąją arba vėlesnę "Java" versiją, galite įterpti "InputStream" į vadinamą bandymą su ištekliais, kurie rūpinasi visomis uždarymo operacijomis.
Apsvarstykite pagrindinius InputStream klasės metodus:
- int available () - grąžina skaitymui baitų skaičių;
- int read () - paima iš išteklių dabartinį baitą ir grąžina jį į sveikojo skaičiaus atstovą; jei skaitomi visi baitai, grąžina -1;
- int read (byte [] buferis) - nuskaito turimus baitusminėtas buferis yra baitas masyvo tipo (baitų skaičius skaityti buferio lygus nurodyto dydžio ir grąžina skaityti pavyko baitų skaičius ir, jeigu visos turimos baitų skaityti, grąžina -1);
- int skaityti (baitas [] buferis, int offset, intbaitų skaičius) - ankstesnio metodo perkrovimas, tas pats, bet su pozicija, nurodyta "kompensuoti" ir nuskaitoma tiek, kiek nurodo "baitų skaičius";
- ilgas praleidimas (ilgas baitų skaičius) - praleidžia nurodytą baitų skaičių ir grąžina faktinį baitų skaičių.
InputStream yra įdiegtas keliomis klasėmis, skirtomis dirbti su skirtingais šaltiniais ir duomenų tipais. Paveldėjimo medis pateikiamas žemiau.
Skaitymo failai
Baitų srautas, skirtas informacijos skaitymui iš failųįgyvendina FileInputStream klasė. Norėdami atidaryti failą skaitymui baitų, pakanka sukurti šios klasės egzempliorių, perduoti failo vardą konstruktoriui kaip argumentą. Jei failas su vardiniu pavadinimu neegzistuoja, bus išmesta išimtis tipo FileNotFoundException.
Sėkmingo failo atidarymo atveju dirbti su juo atliekami aukščiau aprašytais metodais, nes FileInputStream yra InputStream įpėdinis.
Primityvių duomenų tipų skaitymas
Ankstesnis pavyzdys apibūdino darbą subaitų reikšmes, kurios gali būti interpretuojamos kaip simboliai. Bet ką daryti, jei mes turime perskaityti sveiką ar dalinę ar loginę vertę? Norėdami tai padaryti, "Java InputStream" netiesiogiai išplečiamas "DataInputStream" klasės. Ši klasė yra "InputStream" aplankas, kuris yra perduotas jai, kai jis sukurtas kaip argumentas konstruktoriui. Šis srautas natūra skaito duomenis dvejetainėje formoje.
"DataInputStream" taip pat įdiegia "DataInput" sąsają ir jos primityvių duomenų tipų skaitymo metodus. Toliau pateikiamas šių metodų sąrašas.
Metodų pavadinimai kalba patys už save - kiekvienas iš jų yra skirtas tam tikros rūšies duomenims nuskaityti.
Buferinis įvesties srautas
Įgyvendintas buferizuotas duomenų nuskaitymo srautasBufferedInputStream klasė Java. Įvesties sritis įtraukiama į šią klasę. Ši klasė papildo srautą su buferiu, kuris leidžia jums skaityti daugiau nei vieną baitą vienu metu. Tai leidžia žymiai pagerinti operacijos efektyvumą. BufferedInputStream yra netiesioginis "InputStream" palikuonis ir, atitinkamai, paveldi visus išvardytus metodus.
Šioje klasėje yra du konstruktoriai:
- BufferedInputStream (InputStream įvesties srautas);
- BufferedInputStream (InputStream įvesties srautas, int buferio dydis)
Iš konstruktorių parašo jūs galite suprasti, kad pirmasis nustato buferio dydį pagal nutylėjimą, o antrojoje jį galima nustatyti rankiniu būdu.
Išvada
Mes apėmė pagrindinį "InputStream" įdiegimą. Jei jums reikia konvertuoti gautus baitus į eilutę, tada į Deja, Java InputStream į String () nėra perkrautas, todėl jums reikės naudoti specialias programas, pvz., IOUtils iš Apache Commons bibliotekos.</ span </ p>