תווים זרם לעומת Byte Stream ב-Java

תווים זרם לעומת Byte Stream ב-Java

זרם הוא זרימה מתמשכת של נתונים. ב-Java I/O זרמי משמשים לקריאה ממקורות קלט או כתיבה ליעדי פלט כגון קבצים. הם מספקים דרך לגשת לנתונים ברצף. חבילת java.io כוללת מחלקות לטיפול גם בזרמי בתים וגם בזרמי תווים וגם להמרה ביניהם.

  • זרם קלט: קורא נתונים מהמקור. 
  • זרם פלט: כותב נתונים ליעד. 

מתי להשתמש ב-Character Stream על Byte Stream:

ב-Java תווים מאוחסנים באמצעות מוסכמות Unicode. זרם תווים שימושי כאשר אנו רוצים לעבד קבצי טקסט. ניתן לעבד קבצי טקסט אלו תו אחר תו. גודל התווים הוא בדרך כלל 16 סיביות.

מתי להשתמש ב-Byte Stream על גבי Character Stream:

מכוון בייט קורא בייט אחר בייט. זרם בתים מתאים לעיבוד נתונים גולמיים כמו קבצים בינאריים.

נקודות מפתח בעת שימוש והתמודדות עם כל אחד מהזרמים לעיל:

  • מחלקות זרם תווים מסתיימות בדרך כלל ב-Reader/Writer ואילו מחלקות זרם בתים מסתיימות ב-InputStream/OutputStream.
  • הקודים לדוגמה במאמר זה משתמשים בזרמים לא מפוצלים שהם פחות יעילים. לביצועים טובים יותר, אנו בדרך כלל עוטפים אותם עם BufferedReader/BufferedWriter (זרמי תווים) או BufferedInputStream/BufferedOutputStream (זרמי בייטים).
  • סגור תמיד זרמים לאחר השימוש כדי לפנות משאבים ולמנוע שגיאות.
  • ייתכן שהקודים שלעיל לא יפעלו במהדרים מקוונים מכיוון שייתכן שלא קיימים קבצים.

זרם תווים

ב-Java תווים מאוחסנים באמצעות מוסכמות Unicode. זרם תווים מאפשר לנו באופן אוטומטי לקרוא/לכתוב נתונים תו אחר תו. לדוגמה FileReader ו- FileWriter הם זרמי תווים המשמשים לקריאה מהמקור ולכתיבה ליעד.

non_unicode_bytesזרמי תווים

דוּגמָה

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

תְפוּקָה:

כותב תוכן לקובץ היעד תו אחר תו

התוכנית בוצעה בהצלחה

Byte Stream

זרם בתים ב-Java הוא זרם המטפל בקלט ופלט של נתונים בינאריים גולמיים של 8 סיביות. הוא משמש בעיקר לקריאה וכתיבת נתונים שאינם טקסטים כגון תמונות אודיו וידיאו או כל קובץ בינארי. לְדוּגמָה FileInputStream משמש לקריאה מהמקור ו- FileOutputStream לכתיבה ליעד.

דוּגמָה:

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

תְפוּקָה:

התוכנית בוצעה בהצלחה

הבדלים בזרם תווים לעומת זרם בתים

אַספֶּקט זרם תווים Byte Stream
טיפל בסוג הנתונים תווי Unicode 16 סיביות (טקסט) נתונים גולמיים של 8 סיביות (בינאריים)
השיעורים מסתיימים ב קורא / כותב InputStream / OutputStream
מתאים ל קבצי טקסט נתוני Unicode תמונות אודיו וידאו קבצים בינאריים
הֲמָרָה ממיר בתים לתווים באופן אוטומטי שום המרה לא עובדת עם בייטים גולמיים
דוגמאות FileReader FileWriter FileInputStream FileOutputStream

מאמר קשור

  • Java IO - קלט/פלט ב-Java עם דוגמאות