1. OutputStream
klasse
We hebben onlangs inputstromen verkend. Het is tijd om over outputstromen te praten.
De OutputStream
klasse is de bovenliggende klasse voor alle klassen die byte-uitvoer ondersteunen. Dit is een abstracte klasse die niets uit zichzelf doet, maar voor elke gelegenheid afstammelingen heeft.
Het klinkt buitengewoon ingewikkeld. Simpel gezegd, deze klasse werkt op bytes en niet op bijvoorbeeld tekens of andere gegevenstypen. En het feit dat het abstract is, betekent dat we het meestal niet gebruiken, maar eerder een van zijn afstammelingen. Bijvoorbeeld, FileOutputStream
en dergelijke.
Maar terug naar de OutputStream
klas. Deze klasse heeft methoden die alle onderliggende klassen moeten implementeren. Dit zijn de belangrijkste:
methoden | Beschrijving |
---|---|
|
Schrijft één byte (geen int ) naar de stream. |
|
Schrijft een reeks bytes naar de stream |
|
Schrijft een deel van een reeks bytes naar de stream |
|
Schrijft alle gegevens die in de buffer zijn opgeslagen naar de stream |
|
Sluit de stroom af |
Wanneer u een object maakt van een klasse die overerft InputStream
, geeft u meestal een bronobject op waarvan de InputStream
gegevens worden gelezen. Wanneer u een object maakt van een klasse die overerft OutputStream
, specificeert u meestal ook het doelobject of de doelstroom waarnaar gegevens worden geschreven.
Laten we kort alle methoden van de klasse doornemen OutputStream
:
write(int b)
methode
Deze methode schrijft één byte (geen int
) naar de uitvoerstroom. De doorgegeven waarde wordt naar een byte gegoten en de eerste drie bytes van de int worden weggegooid.
write(byte[] buffer)
methode
Schrijft de gegeven reeks bytes naar de uitvoerstroom. Dat is het.
write(byte[] buffer, int offset, int length)
methode
Schrijft een deel van de doorgegeven reeks bytes naar de uitvoerstroom. De offset-variabele geeft de index van het eerste element van de array aan en length
is de lengte van de subset die moet worden geschreven.
flush()
methode
De flush()
methode wordt gebruikt om alle potentieel gebufferde gegevens in de huidige stroom te forceren om naar de doelstroom te schrijven. Dit is relevant bij het gebruik van buffering en/of meerdere stream-objecten die in een keten zijn gerangschikt.
close()
methode
Schrijft alle ongeschreven gegevens naar het doelobject. De close()
methode hoeft niet te worden aangeroepen als u een try-with-resources
blok gebruikt.
Voorbeeld van het kopiëren van een bestand
Code | Opmerking |
---|---|
|
InputStream voor het lezen van een bestand OutputStream voor het schrijven naar een bestand Buffer waarin we de gegevens zullen lezen Zolang er gegevens in de stroom zijn Lees gegevens in de buffer Schrijf de gegevens van de buffer naar de tweede stroom |
2. Writer
klasse
De Writer
klasse is precies hetzelfde als de OutputStream
klasse, maar er is weer één verschil: het werkt met tekens ( char
) in plaats van met bytes.
Dit is een abstracte klasse: u kunt geen objecten van de Writer
klasse maken. Het belangrijkste doel is om een gemeenschappelijke ouderklasse te zijn voor honderden onderliggende klassen en hen gemeenschappelijke methoden te geven voor het werken met personagestromen.
Methoden van de Writer
klasse (en al zijn onderliggende klassen):
methoden | Beschrijving |
---|---|
|
Schrijft één teken (geen int ) naar de stream. |
|
Schrijft een reeks tekens naar de stream |
|
Schrijft een deel van een reeks tekens naar de stream |
|
Schrijft een string naar de stream |
|
Schrijft een deel van een string naar de stream |
|
Schrijft alle gegevens die in de buffer zijn opgeslagen naar de stream |
|
Sluit de stroom af |
De methoden lijken erg op de methoden van de OutputStream
klasse, maar ze werken met tekens in plaats van bytes.
Beschrijving van methoden:
write(int b)
methode
Deze methode schrijft een enkel teken ( char
— niet een int
) naar de uitvoerstroom. De doorgegeven waarde wordt gecast naar a char
en de eerste twee bytes worden weggegooid.
write(char[] buffer)
methode
Schrijft de gegeven reeks tekens naar de uitvoerstroom.
write(char[] buffer, int offset, int length)
methode
Schrijft een deel van de doorgegeven reeks tekens naar de uitvoerstroom. De offset
variabele geeft de index aan van het eerste element van de array en length
is de lengte van de te schrijven subset.
write(String str)
methode
Schrijft de gegeven string naar de uitvoerstroom.
write(String str, int offset, int length)
methode
Schrijft een deel van de gegeven tekenreeks naar de uitvoerstroom: de tekenreeks wordt geconverteerd naar een reeks tekens. De offset
variabele geeft de index aan van het eerste element van de array en length
is de lengte van de te schrijven subset.
flush()
methode
De flush()
methode wordt gebruikt om alle potentieel gebufferde gegevens in de huidige stroom te forceren om naar de doelstroom te schrijven. Dit is relevant bij het gebruik van buffering en/of meerdere stream-objecten die in een keten zijn gerangschikt.
close()
methode
Schrijft alle ongeschreven gegevens naar het doelobject. De close()
methode hoeft niet te worden aangeroepen als u een try-with-resources
blok gebruikt.
Voorbeeld van een programma dat een tekstbestand kopieert:
Code | Opmerking |
---|---|
|
Reader voor het lezen van een bestand Writer voor het schrijven naar een bestand Buffer waarin we de gegevens zullen lezen Zolang er gegevens in de stroom zijn Lees gegevens in een buffer Schrijf de gegevens van de buffer naar de tweede stroom |
StringWriter
klas
Er is nog een andere interessante klasse die de Writer
klasse erft: deze heet StringWriter
. Het bevat een veranderlijke string - een StringBuffer
object. En elke keer dat u iets naar het StringWriter
object "schrijft", wordt de tekst gewoon toegevoegd aan de interne buffer.
Voorbeeld:
Code | Opmerking |
---|---|
|
Er wordt een doeltekenstroom ( StringWriter ) gemaakt Er wordt een tekenreeks naar de buffer in de buffer geschreven StringWriter Een tekenreeks wordt naar de buffer in de StringWriter De inhoud van een object in een tekenreeks converteren |
In dit geval is de StringWriter
klasse in wezen een wikkel over de StringBuffer
klasse, maar de StringWriter
klasse is een afstammeling van de Writer
stroomklasse en kan worden gebruikt in ketens van stroomobjecten. Dit is in de praktijk een behoorlijk nuttige eigenschap.
GO TO FULL VERSION