Java'da Karakter Akışı ve Bayt Akışı

Java'da Karakter Akışı ve Bayt Akışı

Akış, sürekli bir veri akışıdır. Java'da G/Ç akışları, giriş kaynaklarından okumak veya dosyalar gibi çıktı hedeflerine yazmak için kullanılır. Verilere sırayla erişmenin bir yolunu sağlarlar. Java.io paketi hem bayt akışlarını hem de karakter akışlarını işlemek ve ayrıca bunlar arasında dönüşüm yapmak için sınıflar içerir.

  • Giriş Akışı: kaynaktan veri okur. 
  • Çıkış Akışı: verileri bir hedefe yazar. 

Bayt Akışı Üzerinden Karakter Akışı ne zaman kullanılmalı:

Java'da karakterler Unicode kuralları kullanılarak saklanır. Metin dosyalarını işlemek istediğimizde karakter akışı kullanışlıdır. Bu metin dosyaları karakter karakter işlenebilir. Karakter boyutu genellikle 16 bittir.

Karakter Akışı Üzerinden Bayt Akışı ne zaman kullanılır?

Bayt odaklı bayt bayt okur. Bir bayt akışı, ikili dosyalar gibi ham verileri işlemek için uygundur.

Yukarıdaki akışlardan herhangi birini kullanırken ve bunlarla ilgilenirken önemli noktalar:

  • Karakter akışı sınıfları genellikle Okuyucu/Yazıcı ile sona ererken bayt akışı sınıfları ise GirişStream/ÇıkışStream ile sona erer.
  • Bu makaledeki örnek kodlar, daha az verimli olan arabelleğe alınmamış akışları kullanır. Daha iyi performans için bunları genellikle BufferedReader/BufferedWriter (karakter akışları) veya BufferedInputStream/BufferedOutputStream (bayt akışları) ile sarıyoruz.
  • Kaynakları serbest bırakmak ve hataları önlemek için kullanımdan sonra akışları daima kapatın.
  • Dosyalar mevcut olmayabileceğinden yukarıdaki kodlar çevrimiçi derleyicilerde çalışmayabilir.

Karakter Akışı

Java'da karakterler Unicode kuralları kullanılarak saklanır. Karakter akışı otomatik olarak verileri karakter karakter okumamıza/yazmamıza olanak tanır. Örneğin FileReader ve FileWriter, kaynaktan okumak ve hedefe yazmak için kullanılan karakter akışlarıdır.

unicode_bytes olmayanKarakter Akışları

Örnek

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  ();      }      }   }   

Çıkış:

İçeriği hedef dosyaya karakter karakter yazar

Program başarıyla yürütüldü

Bayt Akışı

Java'daki bayt akışı, ham 8 bitlik ikili verilerin girişini ve çıkışını işleyen bir akıştır. Esas olarak görüntüler, ses, video veya herhangi bir ikili dosya gibi metin olmayan verileri okumak ve yazmak için kullanılır. Örneğin Dosya Giriş Akışı kaynaktan okumak için, FileOutputStream ise hedefe yazmak için kullanılır.

Örnek:

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  ();      }      }   }   

Çıkış:

Program başarıyla yürütüldü

Karakter Akışı ve Bayt Akışı Farkları

Bakış açısı Karakter Akışı Bayt Akışı
İşlenen veri türü 16 bit Unicode karakterler (metin) 8 bit ham veri (ikili)
Dersler şununla bitiyor: Okuyucu / Yazar Giriş Akışı / Çıkış Akışı
Şunun için uygun: Metin dosyaları Unicode verileri Görüntüler ses video ikili dosyaları
Dönüşüm Baytları otomatik olarak karakterlere dönüştürür Ham baytlarla hiçbir dönüşüm çalışmaz
Örnekler Dosya Okuyucu Dosya Yazarı FileInputStream FileOutputStream

İlgili Makale

  • Java IO - Örneklerle Java'da Giriş/Çıkış