logo

Karakterstream versus bytestream in Java

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.

niet-unicode_bytes' title=Karakterstromen

Voorbeeld

Java
import 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:

Java
import 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

AspectKarakterstroomBytestroom
Gegevenstype verwerkt16-bit Unicode-tekens (tekst)8-bit onbewerkte gegevens (binair)
De lessen eindigen opLezer / SchrijverInputStream / OutputStream
Geschikt voorTekstbestanden Unicode-gegevensAfbeeldingen audio-video binaire bestanden
ConversieConverteert bytes automatisch naar tekensGeen enkele conversie werkt met onbewerkte bytes
VoorbeeldenBestandslezer BestandsschrijverFileInputStream FileOutputStream

Gerelateerd artikel

  • Java IO - Invoer/uitvoer in Java met voorbeelden