Io :: מארק

לקרוא filehandles בלתי נגיש לא הרסני
הורד עכשיו

Io :: מארק דירוג וסיכום

פרסומת

  • Rating:
  • רישיון:
  • Perl Artistic License
  • שם המפרסם:
  • Andy Armstrong
  • אתר האינטרנט של המוציא לאור:
  • http://search.cpan.org/~andya/

Io :: מארק תגים


Io :: מארק תיאור

לקרוא filehandles בלתי נגיש לא הרסני תארו לעצמכם יש לך פונקציה get_image_size. אתה מעביר אותו filehandle זה פתוח על קובץ תמונה והוא מחזיר את הממדים של התמונה. כמו כן יש לך שקע פתוח שבו אתה מצפה לקבל תמונה. אתה רוצה לדעת את הממדים של תמונה זו וגם ללכוד את הנתונים שלה.אם אתה עובר את הידית Socket כדי get_image_size זה יהיה לצרוך כמה נתונים מתוך שקע - מספיק כדי לקרוא את כותרת התמונה ולעבוד את מימדייה. למרבה הצער כל הנתונים ש- Get_Image_size קורא אבוד; אתה יודע את הממדים של התמונה אבל איבדת כמה מהנתונים שלה ואתה לא יכול rewind את השקע לחזור לתחילת התמונה; שקעים אינם מבקשים. Sub_Image Send_Image {שלי $ Socket = Shift; # זה עובד בסדר ... שלי ($ רוחב, $ גובה) = get_image_size ($ שקע); # ... אבל הנתונים שאנו שולחים כאן יהיה חסר כל כותרת # bytes get_image_size נצרך. Send_image_data (רוחב $, $ גובה, $ שקע); } אתה יכול לחץ את התמונה כולה בקובץ, לפתוח את הקובץ ולעבור לטפל זה כדי get_image_size. זה עובד אבל אומר שאנחנו לא יכולים לחשב את גודל התמונה עד שיש לנו את כל התמונה. אם במקום קובץ תמונה התמודדות עם הזרמת אודיו זרם הקלט עשוי להיות אינסופי ביעילות - אשר יגרום למטמון אותו בקובץ אי נוחות. אנחנו יכולים לשכתב get_image_size כדי למטמון כל הנתונים שהוא קורא מהשקע. לאחר מכן נוכל לשלוח את הנתונים לפני שליחת שאר הנתונים מהשקע. זה כנראה אומר לחפור סביב בתוך פונקציה לא כתבנו צימוד ממשק שלה בחוזקה ליישום שלנו. זה יהיה טוב כדי למנוע את זה.הנה של הפתרון: השתמש IO :: מארק; Sub_Image Send_Image {שלי $ Socket = Shift; $ mark = io :: סימן-> חדש ($ שקע); # זה עובד בסדר ... שלי ($ רוחב, $ גובה) = get_image_size ($ מארק); $ סימון-> סגור; # ... וכך גם זה! Send_image_data (רוחב $, $ גובה, $ שקע); } IO :: מארק הוא IO :: ידית המחזקת נתונים מהידית שממנו היא נוצרה מבלי לצרוך נתונים מנקודת המבט של הידית המקורית. השיחה המפורשת לסגור פעם אחת עם $ סימן. כל עוד הטיפול IO :: סימן הוא בהיקף ולפתוח כל הנתונים לקרוא מהידית המקורית יהיה buffered בזיכרון במקרה זה צריך לקרוא את ידית משובצת מדי. כדי למנוע זאת באופן מפורש לסגור את הידית המשובצת או לאפשר לו לצאת מ- Scope.synopsis להשתמש IO :: מארק; Sub בחן {my $ FH = Shift; $ mark = io :: mark-> חדש ($ fh); שלי buf שלי; # קורא מ $ FH באמצעות $ מארק $ מארק-> קרא ($ buf, 1000, 0); # לעשות משהו עם $ BUF # כאשר $ מארק יוצא של היקף $ FH אין נתונים יופיעו יש # כבר נצרך מ $ fh} דרישות: · פרל


Io :: מארק תוכנה קשורה