כיתת Java PipedWriter
ה כיתת PipedWriter ב-Java מאפשר לשני חוטים לתקשר זה עם זה על ידי העברת נתונים דרך צינור. מחלקה זו שימושית כאשר אנו רוצים שחלק אחד של התוכנית ישלח נתונים לחלק אחר מבלי לאחסן אותם בזיכרון.
תכונות של כיתת PipedWriter:
- זה מאפשר כתיבת נתונים לתוך צינור.
- הוא משתמש במאגר כדי לאחסן נתונים באופן זמני לפני שליחתם ל- PipedReader.
- זה עובד עם PipedReader כדי להבטיח העברת נתונים בטוחה בין שרשורים.
- אם הצינור נשבר הוא זורק שגיאה.
הצהרת PipedWriter ב-Java
ההצהרה של כיתת PipedWriter היא:
כיתה ציבורית PipedWriter מרחיבה את Writer
- ניתן לסגירה: ממשק זה משמש מחלקות המטפלות במשאבים.
- ניתן לשטיפה: ממשק זה משמש כדי לשטוף נתונים ליעדם.
- ניתן להוספה: ממשק זה משמש להוספת נתונים לזרם קיים.
- ניתן לסגירה אוטומטית: ממשק זה מאפשר סגירה אוטומטית של משאבים.
בונים בכיתה PipedWriter
מחלקה זו מורכבת משני בנאים שבעזרתם נוכל ליצור אובייקטים של מחלקה זו בדרכים שונות. להלן הבנאים הזמינים במחלקה זו:
1. PipedWriter(): הבנאי הזה משמש ליצירת PipedWriter שעדיין לא מחובר לשום דבר.
תַחבִּיר:
PipedWriter()
דוּגמָה:
Java // Demonstrating the working // of PipedWriter() import java.io.* ; class Geeks { public static void main ( String [] args ) { // Create PipedWriter and PipedReader PipedWriter w = new PipedWriter (); PipedReader r = new PipedReader (); try { // Connect the PipedWriter to the PipedReader w . connect ( r ); // Create a thread to write data into the pipe Thread writerThread = new Thread ( new Runnable () { public void run () { try { w . write ( 'Hello from PipedWriter!' ); w . close (); } catch ( IOException e ) { e . printStackTrace (); } } }); // Create a thread to read data from the pipe Thread readerThread = new Thread ( new Runnable () { public void run () { try { int data ; while (( data = r . read ()) != - 1 ) { System . out . print (( char ) data ); } r . close (); } catch ( IOException e ) { e . printStackTrace (); } } }); // Start both threads writerThread . start (); readerThread . start (); // Wait for both threads to finish writerThread . join (); readerThread . join (); } catch ( IOException | InterruptedException e ) { e . printStackTrace (); } } }
תְפוּקָה
Hello from PipedWriter!
2. PipedWriter(PipedReader inStream): הבנאי הזה שהשתמשנו בו כדי ליצור PipedWriter ומחבר אותו ל-PipedReader.
תַחבִּיר:
PipedWriter (PipedReader snk)
דוּגמָה:
Java // Demonstrating the working // PipedWriter(PipedReader snk) import java.io.* ; public class Geeks { public static void main ( String [] args ) { try { // Create a PipedReader and a PipedWriter PipedReader r = new PipedReader (); PipedWriter w = new PipedWriter ( r ); // Create a thread to write data to the PipedWriter Thread writerThread = new Thread (() -> { try { w . write ( 'Hello PipedWriter' ); w . close (); } catch ( IOException e ) { e . printStackTrace (); } }); // Create a thread to read data from the PipedReader Thread readerThread = new Thread (() -> { try { int data ; while (( data = r . read ()) != - 1 ) { System . out . print (( char ) data ); } } catch ( IOException e ) { e . printStackTrace (); } }); // Start both threads writerThread . start (); readerThread . start (); // Wait for both threads to finish writerThread . join (); readerThread . join (); } catch ( IOException | InterruptedException e ) { e . printStackTrace (); } } }
תְפוּקָה
Hello PipedWriter
שיטות Java PipedWriter
התמונה למטה מדגימה את השיטות של מחלקה PipedWriter.
כעת נדון בפירוט על כל שיטה בזה אחר זה:
1. כתוב (int char): שיטה זו משמשת לכתיבת תו בודד לצינור.
תַחבִּיר:
public void write(int char)
- פָּרָמֶטֶר: שיטה זו לוקחת פרמטר אחד שמייצג את התו שייכתב.
- חֲרִיגָה: שיטה זו מחזירה את IOException אם יש בעיה בפעולת ה-I/O.
2. write(char[] carray int offset int maxlen): שיטה זו משמשת לכתיבת תווים ממערך לצינור.
תַחבִּיר:
public void write(char[] carray int offset int maxlen)
- פָּרָמֶטֶר: שיטה זו כוללת שלושה פרמטרים המפורטים להלן:
- carray: מערך התווים הוא שמכיל נתונים
- לְקַזֵז: זה המיקום במערך שבו להתחיל לכתוב טופס
- מקסלן: זהו המספר המרבי של תווים לכתיבה.
- חֲרִיגָה: שיטה זו מחזירה את IOException אם יש בעיה בפעולת ה-I/O.
3. התחבר (יעד PipedReader): שיטה זו משמשת לחיבור PipedWriter ל-PipedReader.
תַחבִּיר:
חיבור ריק ציבורי (יעד PipedReader)
- פָּרָמֶטֶר: שיטה זו לוקחת יעד אחד של פרמטר זה הוא PipedReader שאליו יתחבר PipedWriter להעברת נתונים.
- חֲרִיגָה: שיטה זו זורקת את IOException אם מתרחשת שגיאה במהלך החיבור.
4. flush(): שיטה זו משמשת לשטוף נתונים בצינור.
תַחבִּיר:
public void flush()
- פָּרָמֶטֶר: שיטה זו אינה לוקחת שום פרמטר.
- חֲרִיגָה: שיטה זו זורקת את IOException אם מתרחשת שגיאה בזמן שטיפת הנתונים.
5. סגור(): שיטה זו משמשת לסגירת PipedWriter.
סינטקס:
public void close()
- פָּרָמֶטֶר: שיטה זו אינה לוקחת שום פרמטר.
- חֲרִיגָה: שיטה זו זורקת את IOException אם יש בעיה עם סגירת הסופר.
כעת נדון כיצד נוכל להשתמש במחלקה PipedWriter כדי לכתוב נתונים ולקרוא אותם דרך PipedReader מחובר
דוּגמָה:
Java // Demonstrating how to use PipedReader // and PipedWriter to transferr an array // of characters between two threads import java.io.* ; public class Geeks { public static void main ( String [] args ) throws IOException { PipedReader r = new PipedReader (); PipedWriter w = new PipedWriter (); r . connect ( w ); // Must connect before use // Writing a char array char [] c = { 'J' 'A' 'V' 'A' }; w . write ( c 0 4 ); // Reading blocks if no data is written yet System . out . print ( 'Output from the pipe:' ); for ( int i = 0 ; i < 4 ; i ++ ) { System . out . print ( ' ' + ( char ) r . read ()); } w . close (); r . close (); } }
תְפוּקָה
Output from the pipe: J A V A
תוכנית Java הממחישה את פעולתן של שיטות מחלקות PipedWriter
כעת נכתוב כמה דמויות לשטוף את הפלט ונסגור את הכותב.
דוּגמָה:
Java // Java program illustrating the working of PipedWriter // write() connect // close() flush() import java.io.* ; public class Geeks { public static void main ( String [] args ) throws IOException { PipedReader r = new PipedReader (); PipedWriter w = new PipedWriter (); try { // Use of connect(): Connecting the writer to the reader r . connect ( w ); // Use of write(int byte): Writing characters to the pipe w . write ( 71 ); w . write ( 69 ); w . write ( 69 ); w . write ( 75 ); w . write ( 83 ); // Use of flush() method: Flushing the output to // make sure all data is written w . flush (); System . out . println ( 'Output after flush():' ); // Reading from the pipe for ( int i = 0 ; i < 5 ; i ++ ) { System . out . print ( ' ' + ( char ) r . read ()); } // Use of close() method: Closing the writer System . out . println ( 'nClosing the Writer stream' ); w . close (); } catch ( IOException e ) { e . printStackTrace (); } } }
תְפוּקָה
Output after flush(): G E E K S Closing the Writer streamצור חידון