1. OutputStreamklasse
Vi har nylig utforsket inndatastrømmer. Det er på tide å snakke om utgangsstrømmer.
Klassen OutputStreamer overordnet klasse for alle klasser som støtter byteutdata. Dette er en abstrakt klasse som ikke gjør noe alene, men den har etterkommerklasser for enhver anledning.
Det høres ekstremt komplisert ut. For å si det enklere, opererer denne klassen på bytes, og ikke for eksempel tegn eller andre datatyper. Og det at den er abstrakt betyr at vi vanligvis ikke bruker den, men heller en av dens etterkommerklasser. For eksempel FileOutputStreamog lignende.
Men tilbake til OutputStreamklassen. Denne klassen har metoder som alle dens etterkommerklasser må implementere. Her er de viktigste:
| Metoder | Beskrivelse |
|---|---|
|
Skriver én byte (ikke en int) til strømmen. |
|
Skriver en rekke byte til strømmen |
|
Skriver en del av en rekke byte til strømmen |
|
Skriver alle data som er lagret i bufferen til strømmen |
|
Lukker strømmen |
Når du oppretter et objekt av en klasse som arver InputStream, spesifiserer du vanligvis et kildeobjekt som InputStreamleser data fra. Når du oppretter et objekt av en klasse som arver OutputStream, spesifiserer du vanligvis også målobjektet eller strømmen som data skal skrives til.
La oss kort gå gjennom alle metodene i klassen OutputStream:
write(int b)metode
Denne metoden skriver en byte (ikke en int) til utdatastrømmen. Den beståtte verdien castes til en byte, og int-ens tre første byte forkastes.
write(byte[] buffer)metode
Skriver den gitte matrisen med byte til utdatastrømmen. Det er det.
write(byte[] buffer, int offset, int length)metode
Skriver en del av den beståtte rekken av byte til utdatastrømmen. Forskyvningsvariabelen indikerer indeksen til det første elementet i matrisen, og lengther lengden på delsettet som skal skrives.
flush()metode
Metoden flush()brukes til å tvinge alle data som potensielt er bufret i den gjeldende strømmen til å skrives til målstrømmen. Dette er relevant ved bruk av buffering og/eller flere strømobjekter arrangert i en kjede.
close()metode
Skriver alle uskrevne data til målobjektet. Metoden close()trenger ikke kalles hvis du bruker en try-with-resourcesblokk.
Eksempel på kopiering av en fil
| Kode | Merk |
|---|---|
|
InputStreamfor å lese fra en fil OutputStreamfor å skrive til en fil Buffer som vi skal lese dataene inn i Så lenge det er data i strømmen Les data inn i bufferen Skriv dataene fra bufferen til den andre strømmen |
2. Writerklasse
Klassen Writerer nøyaktig den samme som OutputStreamklassen, men bare én forskjell igjen: den fungerer med tegn ( char) i stedet for byte.
Dette er en abstrakt klasse: du kan ikke lage objekter av Writerklassen. Hovedmålet er å være en felles foreldreklasse for hundrevis av etterkommerklasser og å gi dem vanlige metoder for å jobbe med karakterstrømmer.
Metoder for Writerklassen (og alle dens etterkommerklasser):
| Metoder | Beskrivelse |
|---|---|
|
Skriver ett tegn (ikke et int) til strømmen. |
|
Skriver en rekke tegn til strømmen |
|
Skriver en del av en rekke tegn til strømmen |
|
Skriver en streng til strømmen |
|
Skriver en del av en streng til strømmen |
|
Skriver alle data som er lagret i bufferen til strømmen |
|
Lukker strømmen |
Metodene ligner veldig på metodene i OutputStreamklassen, men de fungerer med tegn i stedet for byte.
Beskrivelse av metoder:
write(int b)metode
Denne metoden skriver et enkelt tegn ( char— ikke et int) til utdatastrømmen. Den beståtte verdien kastes til en char, og de to første bytene forkastes.
write(char[] buffer)metode
Skriver den gitte rekken av tegn til utdatastrømmen.
write(char[] buffer, int offset, int length)metode
Skriver en del av den beståtte rekken av tegn til utdatastrømmen. Variabelen offsetindikerer indeksen til det første elementet i matrisen, og lengther lengden på delsettet som skal skrives.
write(String str)metode
Skriver den gitte strengen til utdatastrømmen.
write(String str, int offset, int length)metode
Skriver en del av den gitte strengen til utdatastrømmen: strengen konverteres til en rekke tegn. Variabelen offsetindikerer indeksen til det første elementet i matrisen, og lengther lengden på delsettet som skal skrives.
flush()metode
Metoden flush()brukes til å tvinge alle data som potensielt er bufret i den gjeldende strømmen til å skrives til målstrømmen. Dette er relevant ved bruk av buffering og/eller flere strømobjekter arrangert i en kjede.
close()metode
Skriver alle uskrevne data til målobjektet. Metoden close()trenger ikke kalles hvis du bruker en try-with-resourcesblokk.
Eksempel på et program som kopierer en tekstfil:
| Kode | Merk |
|---|---|
|
Readerfor å lese fra en fil Writerfor å skrive til en fil Buffer som vi skal lese dataene inn i Så lenge det er data i strømmen Les data inn i en buffer Skriv dataene fra bufferen til den andre strømmen |
StringWriterklasse
Det er en annen interessant klasse som arver Writerklassen: den heter StringWriter. Den inneholder en foranderlig streng - et StringBufferobjekt. Og hver gang du "skriver" noe til objektet StringWriter, blir teksten ganske enkelt lagt til den interne bufferen.
Eksempel:
| Kode | Merk |
|---|---|
|
En måltegnstrøm ( StringWriter) opprettes En streng skrives til bufferen inne i StringWriterEn streng skrives til bufferen inne i StringWriterKonvertering av innholdet i et objekt til en streng |
I dette tilfellet StringWriterer klassen i hovedsak en innpakning over StringBufferklassen, men StringWriterklassen er en etterkommer av Writerstrømklassen, og den kan brukes i kjeder av strømobjekter. Dette er en ganske nyttig egenskap i praksis.
3. PrintStreamklasse
Utgangsstrømklasser kan også settes inn i en kjede med mellomstrømmer som skriver data til målstrømmen som sendes til dem. Det generelle synet på samspillet mellom disse strømmene ser slik ut:

Den mest interessante og allsidige av alle mellomliggende utdatastrømmer er PrintStream. Den har titalls metoder og så mange som 12 konstruktører.
Klassen PrintStreamarver FilterOutputStreamklassen, som arver OutputStream. Det betyr at PrintStreamklassen har alle metodene til foreldreklassene i tillegg til sine egne metoder . Her er de mest interessante:
| Metoder | Beskrivelse |
|---|---|
|
Konverterer det beståtte objektet til en streng og sender det ut til målstrømmen. |
|
Konverterer det beståtte objektet til en streng og sender det ut til målstrømmen. Legger til et linjeskift på slutten |
|
Sender ut et linjeskifttegn til målstrømmen |
|
Konstruerer og sender ut en streng basert på formatstrengen og de beståtte argumentene; lik String.format()metoden |
Og hvor er disse titalls metodene, spør du?
Vel, den har mange varianter av print()og println()metoder med forskjellige parametere. De kan oppsummeres i denne tabellen.
Vi vil ikke dykke ned i disse metodene, fordi du allerede kjenner dem godt. Kan du gjette hva jeg vil til?
Husker du System.out.println()? Men det kan skrives på to linjer:
| Kode | Konsollutgang |
|---|---|
|
|
Vår favorittkommando er et kall til metoden på den statiske variabelen til klassen. Og denne variabelens type er .System.out.println()println()outSystemPrintStream
På mange CodeGym-nivåer, og i nesten alle oppgaver, har du kalt klassens metoder PrintStreamuten å vite det!
Praktisk bruk
Java har denne interessante klassen kalt ByteArrayOutputStream, som er en dynamisk voksende byte-array som arver OutputStream.
Et ByteArrayOutputStreamobjekt og PrintStreamobjekt kan lenkes slik:
| Kode | Beskrivelse |
|---|---|
|
Lag en skrivebuffer i minnet Pakk bufferen inn i et PrintStreamobjekt Skriv data til konsollen Konverter arrayet til en streng! Konsollutgang: |
GO TO FULL VERSION