Een stroom is een continue stroom gegevens. In Java worden I/O-streams gebruikt om van invoerbronnen te lezen of naar uitvoerbestemmingen zoals bestanden te schrijven. Ze bieden een manier om sequentieel toegang te krijgen tot gegevens. Het java.io-pakket bevat klassen voor het verwerken van zowel bytestreams als karakterstreams en ook voor het converteren daartussen.
- Invoerstroom: leest gegevens uit de bron.
- Uitvoerstroom: schrijft gegevens naar een bestemming.
Wanneer karakterstream via bytestream gebruiken:
In Java worden tekens opgeslagen met behulp van Unicode-conventies. Tekenstroom is handig als we tekstbestanden willen verwerken. Deze tekstbestanden kunnen karakter voor karakter worden verwerkt. De tekengrootte is doorgaans 16 bits.
Wanneer moet je Byte Stream gebruiken in plaats van Character Stream:
Byte-georiënteerd leest byte voor byte. Een bytestream is geschikt voor het verwerken van onbewerkte gegevens zoals binaire bestanden.
Belangrijke punten bij het gebruik en omgaan met een van de bovenstaande streams:
- Karakterstreamklassen eindigen meestal met Reader/Writer, terwijl bytestreamklassen eindigen met InputStream/OutputStream.
- De voorbeeldcodes in dit artikel gebruiken ongebufferde stromen die minder efficiënt zijn. Voor betere prestaties verpakken we ze gewoonlijk met BufferedReader/BufferedWriter (karakterstreams) of BufferedInputStream/BufferedOutputStream (bytestreams).
- Sluit streams altijd na gebruik om bronnen vrij te maken en fouten te voorkomen.
- De bovenstaande codes worden mogelijk niet uitgevoerd in online compilers omdat er mogelijk geen bestanden bestaan.
Karakterstroom
In Java worden tekens opgeslagen met behulp van Unicode-conventies. Met de tekenstroom kunnen we gegevens automatisch teken voor teken lezen/schrijven. FileReader en FileWriter zijn bijvoorbeeld tekenstromen die worden gebruikt om van de bron te lezen en naar de bestemming te schrijven.
KarakterstromenVoorbeeld
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null as we have not read anything FileReader sourceStream = null; try { // Reading from file sourceStream = new FileReader('/Users/mayanksolanki/Desktop/demo.rtf'); // Reading sourcefile and writing content to target file character by character. int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) System.out.println((char)temp); System.out.print('Program successfully executed'); } finally { if (sourceStream != null) sourceStream.close(); } } }
Uitgang:
Schrijft inhoud teken voor teken naar het doelbestand
Programma succesvol uitgevoerd
Bytestroom
Een bytestream in Java is een stream die de invoer en uitvoer van onbewerkte 8-bits binaire gegevens verwerkt. Het wordt voornamelijk gebruikt voor het lezen en schrijven van niet-tekstgegevens, zoals afbeeldingen, audio, video of elk binair bestand. Bijvoorbeeld FileInputStream wordt gebruikt om te lezen van de bron en FileOutputStream om naar de bestemming te schrijven.
Voorbeeld:
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null ot objects for reading and writing to file FileInputStream sourceStream = null; FileOutputStream targetStream = null; try { // Passing the files via local directory sourceStream = new FileInputStream('/Users/mayanksolanki/Desktop/demo.rtf'); targetStream = new FileOutputStream('/Users/mayanksolanki/Desktop/democopy.rtf'); // Reading source file and writing content to file byte by byte int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) targetStream.write((byte)temp); System.out.print('Program successfully executed'); } // finally block that executes for sure where we are closing file connections to avoid memory leakage finally { if (sourceStream != null) sourceStream.close(); if (targetStream != null) targetStream.close(); } } }
Uitgang:
Programma succesvol uitgevoerd
Verschillen in karakterstream versus bytestream
| Aspect | Karakterstroom | Bytestroom |
|---|---|---|
| Gegevenstype verwerkt | 16-bit Unicode-tekens (tekst) | 8-bit onbewerkte gegevens (binair) |
| De lessen eindigen op | Lezer / Schrijver | InputStream / OutputStream |
| Geschikt voor | Tekstbestanden Unicode-gegevens | Afbeeldingen audio-video binaire bestanden |
| Conversie | Converteert bytes automatisch naar tekens | Geen enkele conversie werkt met onbewerkte bytes |
| Voorbeelden | Bestandslezer Bestandsschrijver | FileInputStream FileOutputStream |
Gerelateerd artikel
- Java IO - Invoer/uitvoer in Java met voorbeelden