מחשביםתכנות

Java: InputStream. זרמי קלט

Java, כמו שפות תכנות מודרניות רבות, תומך ביישום זרמי קלט נתונים. ב- Java InputStream היא מחלקת הבסיס עבור הזרמים בייט. מחלקה זו היא מופשטת, כי הוא, במהלך התוכנית אנחנו לא יכולים ליצור מופע של זה. עם זאת, החבילה IO יש קבוצה של כיתות כי יירש ולהרחיב את הפונקציונליות של InputStream. כדי להשתמש בכיתה זה בקוד שלך, זה חייב להיות מיובא חבילת java.io.InputStream. בא, אנו רואים את הפונקציונליות הבסיסית המספקת בכיתת InputStream, וסוגים העיקריים המיישמים אותה.

שיטות בכיתה InputStream

לפני שתמשיך מחקר מפורט של השיטות בכיתת InputStream, יש לציין כי זה מיישם ממשקי closeable ו AutoCloseable. ממשק closeable מספרת לנו כי בסיום העבודה עם הזרם של זה בהכרח חייב להיות סגור. הדבר נעשה באמצעות קרוב שיטה (). מאחר שרוב השיטות בכיתה InputStream במקרה של שגיאה מייצר סוג חריג IOException, כל הפעולות הנדרשות כדי לנהל בלוק try ו לסיומה שיטת () סוף סוף לעשות יחידה כך שהוא מעד תלוי את התוצאה של פעולה כדי לנסות הגוף.

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

קח למשל את השיטות הבסיסיות של כיתת InputStream:

  • int זמין () - מחזיר מספר קריאה של בתים;
  • int לקרוא () - לוקח את בייט הנוכחי של המשאב ומחזיר את הייצוג השלם; אם כל הבייטים שנקראו, -1 מוחזר;
  • int לקרוא (בייט [] חיץ) - קורא את בייטים זמין אמר חיץ בדמות סוג מערך בתים (מספר הבתים קרא אחסון זמני שווה לגודל שצוין ומחזירה את מספר הבייטים שנקראו הצליח ואם כל בייטים זמין לקריאה, מחזירה -1);
  • int לקרוא (בייט [] חיץ, int לקזז, מספר int של בתים) - העומס של השיטה הקודמת, עושה את אותו הדבר, אבל עם עמדה "לקזז" מצוינת וקורא ככל שנקבע "מספר הבתים";
  • דלג ארוך (ספירה בייט ארוכה) - מספר דילוגי בתים ומחזירים את מספר בפועל של החמיץ.

InputStream מיושמת בכמה כיתות תוכננו לעבוד עם מקורות וסוגים שונים של נתונים. להלן מציג את עץ הירושה.

קריאת קבצים

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

במקרה של מוצלח פתוח קובץ, העבודה איתם מתבצעת באמצעות השיטות שתוארו לעיל, כמו הוא ממשיכו FileInputStream InputStream.

קריאת סוגי נתונים פרימיטיביים

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

DataInputStream גם מיישם את ממשק DataInput ושיטותיו לקריאת סוגי נתונים פרימיטיביים. להלן רשימה של שיטות אלה.

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

זרם קלט שנאגר

קריאת נתוני זרם שנאגר ממומש בכיתת BufferedInputStream ב- Java. InputStream עטוף ידי המעמד הזה. מחלקה זו משלימה את זרם חיץ, המאפשר לך לקרוא באותו זמן לא אחד אלא כמה בייטים. זה מאפשר לשפר משמעותית את הביצועים של המבצע. BufferedInputStream צאצא InputStream מהווה עקיפה ובכך יורשת את כל השיטות שהוזכרו לעיל.

יש בכיתה זו יש שני בנאים:

  • BufferedInputStream (זרם קלט InputStream);
  • BufferedInputStream (זרם קלט InputStream, חיץ int גודל)

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

מסקנה

סקרנו את המימוש הבסיסי של InputStream. אם אתה צריך להמיר את הבתים שהתקבלו למחרוזת ב- Java InputStream כדי String (), למרבה הצער, לא עמוס, אז זה יצטרך להשתמש בכלים מיוחדים, למשל IOUtils מספריית Commons אפאצ'י.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 iw.atomiyme.com. Theme powered by WordPress.