1. OutputStreamklass
Vi har nyligen utforskat indataströmmar. Det är dags att prata om utgångsströmmar.
Klassen OutputStreamär den överordnade klassen för alla klasser som stöder byte-utdata. Det här är en abstrakt klass som inte gör något på egen hand, men den har efterkommande klasser för varje tillfälle.
Det låter extremt komplicerat. För att uttrycka det enklare, den här klassen fungerar på bytes, och inte till exempel tecken eller andra datatyper. Och det faktum att det är abstrakt gör att vi vanligtvis inte använder det, utan snarare en av dess efterkommande klasser. Till exempel FileOutputStreamoch liknande.
Men tillbaka till OutputStreamklassen. Den här klassen har metoder som alla dess underliggande klasser måste implementera. Här är de viktigaste:
| Metoder | Beskrivning |
|---|---|
|
Skriver en byte (inte en int) till strömmen. |
|
Skriver en array av byte till strömmen |
|
Skriver en del av en array av byte till strömmen |
|
Skriver all data lagrad i bufferten till strömmen |
|
Stänger strömmen |
När du skapar ett objekt av en klass som ärver InputStreamanger du vanligtvis ett källobjekt som InputStreamläser data från. När du skapar ett objekt av en klass som ärver OutputStreamanger du vanligtvis också målobjektet eller strömmen som data ska skrivas till.
Låt oss kort gå igenom klassens alla metoder OutputStream:
write(int b)metod
Denna metod skriver en byte (inte en int) till utgångsströmmen. Det godkända värdet castas till en byte, och int:s första tre byte kasseras.
write(byte[] buffer)metod
Skriver den givna arrayen av byte till utgångsströmmen. Det är allt.
write(byte[] buffer, int offset, int length)metod
Skriver en del av den passerade arrayen av byte till utgångsströmmen. Offsetvariabeln indikerar indexet för det första elementet i matrisen och lengthär längden på delmängden som ska skrivas.
flush()metod
Metoden flush()används för att tvinga all data som potentiellt är buffrad i den aktuella strömmen att skrivas till målströmmen. Detta är relevant när man använder buffring och/eller flera strömobjekt arrangerade i en kedja.
close()metod
Skriver all oskriven data till målobjektet. Metoden close()behöver inte anropas om du använder ett try-with-resourcesblock.
Exempel på kopiering av en fil
| Koda | Notera |
|---|---|
|
InputStreamför att läsa från en fil OutputStreamför att skriva till en fil Buffert som vi kommer att läsa in data i Så länge det finns data i strömmen Läs data i bufferten Skriv data från bufferten till den andra strömmen |
2. Writerklass
Klassen Writerär exakt samma som OutputStreamklassen, men bara en skillnad igen: den fungerar med tecken ( char) istället för byte.
Det här är en abstrakt klass: du kan inte skapa objekt i Writerklassen. Dess huvudsakliga mål är att vara en gemensam föräldraklass för hundratals efterkommande klasser och att ge dem gemensamma metoder för att arbeta med karaktärsströmmar.
Metoder för Writerklassen (och alla dess underliggande klasser):
| Metoder | Beskrivning |
|---|---|
|
Skriver ett tecken (inte ett int) till strömmen. |
|
Skriver en rad tecken till strömmen |
|
Skriver en del av en uppsättning tecken till strömmen |
|
Skriver en sträng till strömmen |
|
Skriver en del av en sträng till strömmen |
|
Skriver all data lagrad i bufferten till strömmen |
|
Stänger strömmen |
Metoderna är väldigt lika metoderna i klassen, OutputStreammen de fungerar med tecken istället för byte.
Beskrivning av metoder:
write(int b)metod
Denna metod skriver ett enstaka tecken ( char— inte ett int) till utmatningsströmmen. Det godkända värdet kastas till a charoch de första två byten kasseras.
write(char[] buffer)metod
Skriver den givna uppsättningen av tecken till utdataströmmen.
write(char[] buffer, int offset, int length)metod
Skriver en del av den passerade arrayen av tecken till utdataströmmen. Variabeln offsetindikerar indexet för det första elementet i arrayen och lengthär längden på delmängden som ska skrivas.
write(String str)metod
Skriver den givna strängen till utgångsströmmen.
write(String str, int offset, int length)metod
Skriver en del av den givna strängen till utdataströmmen: strängen konverteras till en array av tecken. Variabeln offsetindikerar indexet för det första elementet i arrayen och lengthär längden på delmängden som ska skrivas.
flush()metod
Metoden flush()används för att tvinga all data som potentiellt är buffrad i den aktuella strömmen att skrivas till målströmmen. Detta är relevant när man använder buffring och/eller flera strömobjekt arrangerade i en kedja.
close()metod
Skriver all oskriven data till målobjektet. Metoden close()behöver inte anropas om du använder ett try-with-resourcesblock.
Exempel på ett program som kopierar en textfil:
| Koda | Notera |
|---|---|
|
Readerför att läsa från en fil Writerför att skriva till en fil Buffert som vi kommer att läsa in data i Så länge det finns data i strömmen Läs data i en buffert Skriv data från bufferten till den andra strömmen |
StringWriterklass
Det finns en annan intressant klass som ärver Writerklassen: den heter StringWriter. Den innehåller en föränderlig sträng — ett StringBufferobjekt. Och varje gång du "skriver" något till objektet StringWriterläggs texten helt enkelt till i dess interna buffert.
Exempel:
| Koda | Notera |
|---|---|
|
En målteckenström ( StringWriter) skapas En sträng skrivs till bufferten inuti StringWriterEn sträng skrivs till bufferten inuti StringWriterKonvertera innehållet i ett objekt till en sträng |
I det här fallet StringWriterär klassen i huvudsak ett omslag över StringBufferklassen, men StringWriterklassen är en ättling till Writerströmklassen och den kan användas i kedjor av strömobjekt. Detta är en ganska användbar egenskap i praktiken.
GO TO FULL VERSION