» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
קלט/פלט סטנדרטי
דף ראשי  מתחילים  קלט/פלט סטנדרטי גרסה להדפסה

קלט/פלט סטנדרטי

 

 

- מבוא
- דיון
-  שאלות סיכום


 

מבוא

 

סטודנטים בקורס הקדמה לתכנות Java אחראים לידיעת והבנת כל החומר בשעור זה
(חוץ מנושאים ספציפיים ב –
C++).

הנושאים הספציפיים ב – C++ מוצעים כחומר משלים לטובת אלו שמכירים כבר C++
ומבצעים הסבה ל –
Java.

דיון

 

מהי זרימה?

 

Java וגם ++C תומכות במושג של זרימת קלט/פלט. בשני המקרים המושג מציין זרימה של בייטים הנכנסים לתוכנית ממקור חיצוני, או זרימה של בייטים היוצאים מן התוכנית ליעד חיצוני.

 

מהו קלט/פלט סטנדרטי?

 

המושגים זרימת קלט סטנדרטי וזרימת פלט סטנדרטי מבוססים על הרעיון של עבודה עם מערכת שיש בה התקן קלט סטנדרטי והתקן פלט סטנדרטי.

 

במערכות DOS ו-UNIX התקן הקלט הסטנדרטי הוא כברירת מחדל המקלדת, אך ניתן לייעד אותו להתקן אחר, ברמת מערכת ההפעלה.

 

בדומה לכך, התקן הפלט הסטנדרטי הוא כברירת מחדל המסך, וגם אותו ניתן לייעד ברמת מערכת ההפעלה להתקן אחר.

 

מהו ייעוד-מחדש של קלט/פלט?

 

משתמשי DOS מכירים את הפקודה הבאה, הגורמת לכך שהתוכן של ספריה ייווצר ויאוחסן בקובץ בשם director.txt בדיסק.

 

dir > director.txt

 

 

זוהי פקודת DOS אשר מייעדת את הפלט הסטנדרטי להתקן אחר במקום למסך,
במקרה זה לקובץ בדיסק.

 

מתודת read()

 

מתודת read() ב‑Java מסוגלת לקרוא ולהחזיר בייט בודד מהתקן הקלט הסטנדרטי ולאחסן אותו
כ-
integer. המתודה מחזירה ערך integer של -1 כאשר היא נתקלת ב"סוף הקובץ" eof)).

 

למה לאחסן ב‑int .

 

אחסון הבייט בחלק התחתון של integer מאפשר לתוכנית להבחין בין ערך integer של -1,
עבור
eof, לבין התו בן 8‑הסיביות שמורכב מהסיביות 11111111

 

אילו הפענוח היה מתבצע על שמונה סיביות בלבד, ערך זה היה מפוענח כ – (1 -) .

 

מהו eof במקלדת?

 

במערכות DOS ניתן לחקות eof מהמקלדת על ידי החזקת המקש CTRL במצב לחוץ ולחיצה על מקש Z .

 

בדומה לכך, במערכות UNIX ניתן לחקות eof מהמקלדת על ידי החזקת המקש CTRL במצב לחוץ ולחיצה מקש  D בתחילת שורה.

 

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

 

קריאה של זרימת בייטים מהמקלדת

 

קטע הקוד הבא יקרא זרימת בייטים מהתקן הקלט הסטנדרטי עד להיתקלות ב‑eof:

 

while(System.in.read() != -1){
  //do something 
}//end while loop

 

 

איזה מבנה OOP מעורב כאן?

 

קטע הקוד הנ"ל ניגש למתודת read() של אובייקט, שעליו מצביע משתנה המחלקה in של מחלקת System.

 

הצגת תווים בהתקן הפלט הסטנדרטי

 

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

 

System.out.println("String argument")
System.out.print("String argument")

 

איזה מבנה OOP מעורב כאן?

 

במקרה הראשון, קטע הקוד ניגש למתודת println() של אובייקט, שעליו מצביע משתנה המחלקה out של מחלקת System. במקרה השני, הקוד ניגש למתודת print() .

 

מה ההבדל בין השניים?

 

ההבדל בין השניים הוא שמתודת println() מכניסה newline באופן אוטומטי בסיום ארגומנט המחרוזת, ואילו מתודת print() משאירה את הסמן בסופו של ארגומנט המחרוזת.
(ההבדל מקביל במידה רבה לשימוש השונה ב‑
WriteLn ו‑Write ב‑Pascal).

 

כיצד זה נעשה ב‑++C ?

 

אף על פי שהן ב‑Java והן ב‑ ++C קיים המושג של זרימת קלט/פלט, המנגנון להשגת קלט/פלט שונה למדי בין שתי השפות. ++C עדיין תומכת בסגנון הישן, שאינו מונחה-עצמים של C,
וגם מספקת סגנון חדש, מונחה-עצמים, הייחודי ל‑++
C .

 

האם יש צורך בדוגמאות נוספות של קלט/פלט ב‑Java ?

 

דוגמאות אחדות לקלט/פלט ב‑Java ניתנו בשיעורים הקודמים, ועל כן אין כל צורך להביא דוגמאות נוספות כאן.

 

קצה הקרחון

 

זרימת קלט/פלט ב‑Java היא נושא מורכב למדי, והוא עוד ידון רבות בשיעורים הבאים.
ההקדמה שהבאנו כאן היא רק קצה הקרחון.

 

זרימת תווים (לעומת זרימת בייטים)

 

יכולת זרימת הקלט/פלט ב‑Java שופרה על מנת לטפל בתווי Unicode בני 16‑סיביות בשדרוג
של 1.1 
JDK לערכת הפיתוח. ההכרזה שלהלן נלקחה מתוך מסמך JavaSoft, הדן בתכונות החדשות שנוספו לגירסת 1.1 JDK .

 

שיפורי קלט/פלט

 

חבילת הקלט/פלט הורחבה לטיפול בזרימת תווים, שאינה שונה מזרימת בייטים למעט העובדה, שאלה הם תווי Unicode בני 16‑סיביות ולא בייטים בני 8‑סיביות. זרימת תווים מקילה על כתיבת תוכניות שאינן תלויות בשיטת פענוח תווים ספציפית, ועל כן קל יותר להפוך אותה לבינלאומית.
כמעט כל התפקודים של זרימת בייטים קיימים גם לגבי זרימת תווים.

 

כיצד ניתן לזהות זרימת תווים?

 

את המחלקות שתומכות בתפקוד של 16‑סיביות ניתן לזהות בקלות. ברובן מופיעות המילים
reader או writer בשם המחלקה. אנו נמשיך לדון בכך באחד השיעורים הבאים.

 

שאלות סיכום

 

ש: מתודת read() ב‑Java קוראת ומחזירה בייט בודד מהתקן הקלט הסטנדרטי.
כאיזה טיפוס היא מאחסנת את הבייט שנקרא?
מה מחזירה המתודה כאשר המשתמש מכניס eof ?

 

ת: מתודת read() ב‑Java קוראת ומחזירה בייט בודד מהתקן הקלט הסטנדרטי ומאחסנת את הבייט כ‑integer. המתודה מחזירה 1- אם המשתמש מכניס eof.

 

ש: איזו לחיצת מקשים משמשת לחיקוי eof מהמקלדת במערכות DOS?

 

ת: במערכות DOS ניתן לחקות eof מהמקלדת על ידי החזקת המקש CTRL במצב לחוץ ולחיצה על מקש Z.

 

ש: הבא קטע קוד לדוגמה הממחיש קריאה של זרימת בייטים מהתקן הקלט הסטנדרטי עד להיתקלות ב‑eof וסיום הקריאה כשזה קורה. הסבר את פעולת קטע הקוד שלך במושגים של תכנות מונחה-עצמים.

 

ת: קטע הקוד הבא יקרא זרימת בייטים מהתקן הקלט הסטנדרטי עד להיתקלות ב‑eof.

 

while(System.in.read() != -1) { //do something }

 

 

קטע הקוד ניגש למתודת read() של אובייקט, שעליו מצביע משתנה המחלקה in של מחלקת System.

 

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

 

ת: כל אחד משני קטעי הקוד הבאים יציג ארגומנט String בהתקן הפלט הסטנדרטי של Java.

 

System.out.println("String argument")
System.out.print("String argument")

 

במקרה הראשון, קטע הקוד ניגש למתודת println() של אובייקט, שעליו מצביע משתנה המחלקה out של מחלקת System. במקרה השני, הקוד ניגש למתודת print() .

ההבדל הוא שמתודת println() מכניסה newline באופן אוטומטי בסיום ארגומנט המחרוזת,
ואילו מתודת
print() משאירה את הסמן בסופו של ארגומנט המחרוזת.

 

 25-12-03 / 21:07  נוצר ע"י רונית רייכמן  בתאריך 
 ארגומנטים משורת הפקודה - הקודםהבא - בקרת גישה 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 10