/ / Java: InputStream. Inngangsstrømmer

Java: InputStream. Inngangsstrømmer

Java, som mange moderne språkprogrammering, støtter implementering av datainngangsstrømmer. I Java er en InputStream baseklasse for bytestrømmer. Denne klassen er abstrakt, det vil si at i prosessen med programmet kan vi ikke lage en forekomst av den. Imidlertid har io-pakken mange klasser som arver og utvider funksjonaliteten til InputStream. For å bruke denne klassen i koden, må du importere den fra java.io.InputStream-pakken. Deretter ser vi på den grunnleggende funksjonaliteten som InputStream-klassen gir, så vel som hovedklassene som implementerer den.

Metoder for InputStream Class

Før du begynner på en detaljert studiemetodene i klassen InputStream, skal det nevnes at den implementerer grensesnittene som kan lukkes og AutoCloseable. Det lukkbare grensesnittet forteller oss at når du er ferdig med å jobbe med en strøm, må du lukke den. Dette gjøres ved å bruke den nære () metoden. Siden de fleste metodene i klassen InputStream kaster en IOException i tilfelle en feil, må alle operasjoner utføres i prøveblokken, og den nære () metoden må settes i sluttblokken slik at den fungerer uavhengig av resultatet av arbeidet i prøvekroppen.

AutoCloseable grensesnitt reduserer betydeligteknisk kode, fordi den lar den nære () metoden skyte automatisk og ikke legge til en endelig blokkering av koden. Hvis du bruker den syvende eller senere versjonen av Java, kan InputStream plasseres i det såkalte try with ressursene, som tar seg av alle operasjonene for å lukke trådene.

java inputstream til streng

Vurder de grunnleggende metodene for klassen InputStream:

  • int tilgjengelig () - returnerer antall byte tilgjengelig for lesing;
  • int read () - tar den nåværende byten fra ressursen og returnerer den i en heltallrepresentasjon; hvis alle byte blir lest, returnerer -1;
  • int read (byte [] buffer) - leser tilgjengelige bytes iden spesifiserte bufferen i form av en matrise av typen byte (antall byte som er lest er lik størrelsen på den spesifiserte bufferen; returnerer antall byte som kunne leses; hvis alle tilgjengelige byte blir lest, returnerer den -1);
  • int read (byte [] buffer, int offset, intantall byte) - overbelastning av forrige metode, gjør det samme, men fra stillingen angitt i "forskyvningen" og leser så mye som er spesifisert i "antall byte";
  • lang hopp (langt antall byte) - hopper over det angitte antallet byte og returnerer det faktiske antallet byte som er hoppet over.

InputStream implementeres av flere klasser designet for å arbeide med forskjellige kilder og datatyper. Nedenfor er arvetreet.

java inputstream

Lese filer

Bytestrøm for å lese informasjon fra filerimplementert av FileInputStream-klassen. For å åpne en fil for å lese byte, er det nok å opprette en forekomst av denne klassen, og overføre navnet til konstruktøren som et argument. Hvis filen med det passerte navnet ikke eksisterer, kastes et unntak av typen FileNotFoundException.

I tilfelle en vellykket filåpning, utføres arbeidet med den ved å bruke metodene beskrevet over, siden FileInputStream er en arv av InputStream.

Lesing av primitive datatyper

Det forrige eksemplet beskrev arbeidet medbyteverdier som kan tolkes som tegn. Men hva hvis vi trenger å lese et heltall, brøk eller logisk verdi? For å gjøre dette, i Java, utvides en InputStream indirekte av DataInputStream-klassen. Denne klassen er en innpakning for en InputStream, som sendes til den når den opprettes som et argument til konstruktøren. Denne typen strøm leser data i binær form.

DataInputStream implementerer også DataInput-grensesnittet og dets metoder for å lese primitive datatyper. Nedenfor er en liste over disse metodene.

java io inputstream

Navnene på metodene taler for seg selv - hver av dem er designet for å lese en viss type data.

Bufret inndatastrøm

Den buffrede datalesestrømmen implementeres.klassen BufferedInputStream i Java. En InputStream er pakket inn av denne klassen. Denne klassen supplerer strømmen med en buffer, som lar deg lese samtidig ikke en, men flere byte. Dette gjør det mulig å øke produktiviteten til operasjonen betydelig. BufferedInputStream er en indirekte etterkommer av InputStream og arver følgelig alle de ovennevnte metodene.

Denne klassen har to konstruktører:

  • BufferedInputStream (InputStream input stream);
  • BufferedInputStream (InputStream input stream, int bufferstørrelse)

Fra signaturen til konstruktørene kan du forstå at den første angir standardbufferstørrelse, og den andre har muligheten til å stille den inn manuelt.

konklusjon

Vi undersøkte de viktigste implementeringene av InputStream. Hvis du trenger å konvertere de mottatte byte til en streng, deretter inn Dessverre er Java InputStream to String () ikke overbelastet, så du må bruke spesielle verktøy, for eksempel IOUtils fra Apache Commons-biblioteket.