/ / Java: InputStream. Ievades plūsmas

Java: InputStream. Ievades plūsmas

Java, tāpat kā daudzas mūsdienu valodasprogrammēšana, atbalsta datu ievades plūsmu ieviešanu. Java programmā InputStream ir baitu plūsmu bāzes klase. Šī klase ir abstrakta, tas ir, programmas gaitā mēs nevaram izveidot tā eksemplāru. Tomēr io paketē ir daudzas klases, kas pārmanto un paplašina InputStream funkcionalitāti. Lai izmantotu šo klasi savā kodā, tas ir jāimportē no java.io.InputStream paketes. Tālāk mēs aplūkojam galvenās funkcijas, ko nodrošina InputStream klase, kā arī galvenās klases, kas to īsteno.

Klases InputStream metodes

Pirms sīki izstrādāta pētījuma uzsākšanasklases InputStream metodes, jāatzīmē, ka tā īsteno saskarnes Closeable un AutoCloseable. Slēgtā saskarne norāda, ka, aizpildot darbu ar pavedienu, tas ir jāaizver. Tas tiek darīts, izmantojot tuvu () metodi. Tā kā lielākā daļa InputStream klases metožu kļūdas gadījumā izgaismo IOException tipa izņēmumu, visas operācijas ir jāveic izmēģinājuma blokā, un tuvā () metode jāievieto gala blokā tā, lai tā darbotos neatkarīgi no darba rezultāta mēģinājumā.

Интерфейс AutoCloseable значительно сокращает tehniskā koda apjoms, jo tas ļauj slēgt () metodi darboties automātiski un neievada gala kodu jūsu kodam. Ja izmantojat septīto vai jaunāko Java versiju, InputStream var ievietot tā saucamajā izmēģinājumā ar resursiem, kas pārņem visas operācijas, lai aizvērtu plūsmu.

java inputstream uz virkni

Apskatīsim galvenās InputStream klases metodes:

  • int pieejams () - atgriež lasīšanai pieejamo baitu skaitu;
  • int lasīt () - ņem no resursa pašreizējo baitu un atdod to veselu skaitļu attēlojumā; ja visi baiti ir nolasīti, atgriež -1;
  • int lasīt (baitu [] buferis) - nolasa pieejamos baitusnorādītais buferis kā tipa baita masīvs (nolasīto baitu skaits ir vienāds ar norādītā bufera lielumu; atgriež nolasīto baitu skaitu; ja visi pieejamie baiti ir nolasīti, atgriež -1);
  • int lasīt (baits [] buferis, int nobīde, intbaitu skaits) - iepriekšējās metodes pārslodze, dara to pašu, bet no pozīcijā, kas norādīta "nobīdē", un nolasa tik daudz, cik norādīts "baitu skaitā";
  • ilgi izlaist (liels baitu skaits) - izlaiž norādīto baitu skaitu un atgriež faktisko izlaisto baitu skaitu.

InputStream ievieš vairākas klases, kas paredzētas darbam ar dažādiem avotiem un datu tipiem. Zemāk ir mantojuma koks.

java inputstream

Failu lasīšana

Baitu straume informācijas lasīšanai no failiemieviesa FileInputStream klase. Lai atvērtu failu baitu lasīšanai, pietiek ar šīs klases instances izveidošanu, nododot faila nosaukumu kā argumentu konstruktoram. Ja fails ar nodoto nosaukumu neeksistē, tiks izmests faila tipa FileNotFoundException izņēmums.

Ja fails ir veiksmīgi atvērts, darbs ar to tiek veikts, izmantojot iepriekš aprakstītās metodes, jo FileInputStream manto no InputStream.

Primitīvu datu tipu lasīšana

Iepriekšējā piemērā aprakstīts darbs arbaitu vērtības, kuras var interpretēt kā rakstzīmes. Bet ko tad, ja mums ir jālasa vesels skaitlis, frakcionēta vai būla vērtība? Lai to izdarītu, Java programmā InputStream netieši paplašina DataInputStream klase. Šī klase ir iesaiņojums InputStream, kas tam tiek nodots, kad tiek izveidots kā konstruktora arguments. Šāda veida straume nolasa datus binārā formā.

DataInputStream arī ievieš DataInput interfeisu un tā metodes primitīvu datu tipu lasīšanai. Zemāk ir šo metožu saraksts.

java io inputstream

Metodes nosaukumi runā paši par sevi - katrs no tiem ir paredzēts, lai nolasītu noteikta veida datus.

Buferēta ievades straume

Tiek ieviesta buferēta nolasīta datu straumeBufferedInputStream klasē Java. InputStream ir iesaiņots ar šo klasi. Šī klase straumi papildina ar buferi, kas ļauj vienlaikus nolasīt nevis vienu, bet vairākus baitus. Tas ļauj ievērojami palielināt operācijas produktivitāti. BufferedInputStream ir netiešs InputStream pēcnācējs, un tāpēc viņš pārmanto visas iepriekš minētās metodes.

Šajā klasē ir divi konstruktori:

  • BufferedInputStream (InputStream ievades straume);
  • BufferedInputStream (InputStream ievades straume, int bufera izmērs)

Pēc konstruktoru parakstiem var saprast, ka pirmais iestata noklusējuma bufera lielumu, bet otrajam ir iespēja to iestatīt manuāli.

Secinājums

Mēs esam apskatījuši galvenos InputStream ieviešanas gadījumus. Ja jums jāpārvērš saņemtie baiti par virkni, tad iekš Java InputStream to String (), diemžēl, nav pārslogota, tāpēc jums ir jāizmanto īpašas utilītas, piemēram, IOUtils no Apache Commons bibliotēkas.