Java: ulazni tok. Ulazni tok

Java, kao i mnogi moderni programski jezici, koja podržava implementaciju tokova podataka. U Javi, InputStream je osnovna klasa za bajtne tokove. Ovaj razred je apstraktan, to jest, u procesu programa, ne možemo stvoriti njegovu kopiju. Međutim, paket io ima mnogo klasa koje nasljeđuju i proširuju InputStream funkcionalnost. Da biste koristili ovu klasu u svom kodu, morate je uvesti iz java.io.InputStream paketa. Zatim ćemo razmotriti osnovne funkcionalnosti klase InputStream, kao i glavne klase koje ga implementiraju.


Metode klase InputStream

Prije nastavka s detaljnom studijom metoda klase InputStream, treba napomenuti da implementira Closeable i AutoCloseable sučelja. Sučelje Closeable govori nam da kada završite rad s niti, morate ga zatvoriti. To se radi pomoću metode close (). Budući da većina InputStream metoda u slučaju pogreške generira iznimku IOException, sve se operacije moraju izvesti u probnom bloku, a metoda close () se prosljeđuje bloku konačno da radi bez obzira na rezultat u tijelu try. AutoCloseable sučelje uvelike smanjuje opseg tehničkog koda, budući da omogućuje close () metodi da radi automatski i ne dodaje blok konačno vašem kodu. Ako koristite sedmu ili kasniju verziju Jave, InputStream se može postaviti u takozvani pokušaj s resursima koji poduzimaju sve operacije isključivanja.


Razmotrimo osnovne metode klase InputStream:
  • int available () - vraća čitljivi brojbajtova;
  • int read () - uzima iz izvora trenutni bajt i vraća ga u cjelobrojnom prikazu; ako se svi bajti čitaju, vraća -1; [Int]
  • int read (byte [] buffer) - čita dostupne bajtove u specificiranom međuspremniku u obliku niza bajtova (broj bajtova za čitanje jedne zadane veličine međuspremnika; vraća broj bajtova koji su čitljivi; 1);
  • int read (bajt [] tampon, int shift, int broj bajtova) - preopterećenje prethodne metode, radi isto, ali s specificiranim u "eliminaciji" pozicije i čita onoliko koliko je navedeno u "broju bajtova" ;
  • dugačak preskakanje (dugi broj bajtova) - preskače određeni broj bajtova i vraća stvarni broj izostavljenih.
  • InputStream je implementiran od strane nekoliko klasa dizajniranih za rad s različitim izvorima i vrstama podataka. Ispod je drvo nasljedstva.

    Čitanje datoteka

    Bajtni tok za čitanje informacija iz datoteka implementiran je pomoću klase FileInputStream. Da biste otvorili datoteku za čitanje bajtova, dovoljno je kreirati instancu te klase tako da ime datoteke proslijedite konstruktoru kao argument. Ako datoteka s prenesenim imenom ne postoji, generira se iznimka za tip FileNotFoundException. U slučaju uspješnog otvaranja datoteke, rad s njom se obavlja pomoću gore opisanih metoda, budući da je FileInputStream nasljednik InputStream-a.

    Čitanje primitivnih tipova podataka

    Prethodni primjer opisuje rad s bajtnim vrijednostima koje se mogu interpretirati kao simboli. Ali što ako trebamo čitati cijeli broj, djelomičan ili logičku vrijednost? uovo u Java InputStream je neizravno prošireno klasom DataInputStream. Ova klasa je ljuska za InputStream, koja se prosljeđuje pri stvaranju argumenta konstruktora. Ova vrsta struje čita podatke u binarnom obliku.
    DataInputStream također implementira sučelje DataInput i njegove metode za čitanje primitivnih tipova podataka. U nastavku se nalazi popis tih metoda.
    Imena metoda govore sama za sebe - svaki od njih namijenjen je čitanju određene vrste podataka.

    Buficirani tok ulaza

    BufferedInputStream klasa u Javi provodi se u međuspremniku. InputStream je ljuska ove klase. Ova klasa nadopunjuje protočni međuspremnik, koji vam omogućuje da istovremeno čitate ne jedan, već nekoliko bajtova. Time je omogućeno značajno povećanje učinkovitosti rada. BufferedInputStream je izravni potomak InputStream i, sukladno tome, nasljeđuje sve gore navedene metode. Ova klasa ima dva konstruktora:
  • BufferedInputStream (ulazni tok InputStream);
  • BufferedInputStream (ulazni tok InputStream, veličina int buffer-a)
  • Iz potpisa konstruktora, može se razumjeti da prvi postavlja zadanu veličinu međuspremnika, au drugom ih je moguće ručno postaviti.

    Zaključak

    Pregledali smo glavne implementacije InputStream-a. Ako trebate pretvoriti primljene bajtove u niz, onda Java InputStream u String () nažalost nije preopterećen, pa ćete morati koristiti posebne alate kao što je IOUtils iz Apache Commons knjižnice.

    Povezane publikacije