1. OutputStream
klass
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 FileOutputStream
och liknande.
Men tillbaka till OutputStream
klassen. 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 InputStream
anger du vanligtvis ett källobjekt som InputStream
läser data från. När du skapar ett objekt av en klass som ärver OutputStream
anger 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-resources
block.
Exempel på kopiering av en fil
Koda | Notera |
---|---|
|
InputStream för att läsa från en fil OutputStream fö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. Writer
klass
Klassen Writer
är exakt samma som OutputStream
klassen, 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 Writer
klassen. 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 Writer
klassen (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, OutputStream
men 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 char
och 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 offset
indikerar 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 offset
indikerar 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-resources
block.
Exempel på ett program som kopierar en textfil:
Koda | Notera |
---|---|
|
Reader för att läsa från en fil Writer fö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 |
StringWriter
klass
Det finns en annan intressant klass som ärver Writer
klassen: den heter StringWriter
. Den innehåller en föränderlig sträng — ett StringBuffer
objekt. Och varje gång du "skriver" något till objektet StringWriter
lä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 StringWriter En sträng skrivs till bufferten inuti StringWriter Konvertera innehållet i ett objekt till en sträng |
I det här fallet StringWriter
är klassen i huvudsak ett omslag över StringBuffer
klassen, men StringWriter
klassen är en ättling till Writer
strömklassen och den kan användas i kedjor av strömobjekt. Detta är en ganska användbar egenskap i praktiken.