بررسی عملیات ورودی و خروجی (بخش اول)

خواندن و نوشتن سی شارپی

یکی از مهم‌ترین بخش‌های هر زبان یا هر چارچوب کاری برای توسعه نرم‌افزار، بخش ورودی و خروجی ـ که اصطلاحا I/O خوانده می‌شود دو کلمه (Input/Output) است. در«net.» نیز برای کار با ورودی و خروجی، کلاس‌هایی معرفی شده است. در این شماره قصد داریم با آنها آشنا شویم.
کد خبر: ۴۷۷۴۴۷

در #C تمامی عملیات I/O از طریق یک Stream انجام می‌گیرد که یک مفهوم انتزاعی در مورد تولید و مصرف اطلاعات است. به واسطه عملیاتی I/O در #C به صورت مستقیم با دستگاه‌های فیزیکی ارتباط برقرار می‌کند و تمامی عملیات مربوط به خواندن و نوشتن روی دستگاه‌های مختلف را به شما ارائه می‌کند.

از آنجا که stream قرار است با تمامی دستگاه‌های فیزیکی ارتباط برقرار کند، تمامی عملیات در سطوح پایین خود با byte‌ها سر و کار دارد، اما یک مشکل وجود دارد. همان طور که می‌دانید نوع داده byte در #C برابر ۸ بیت است و یک کاراکتر برابر ۱۶بیت (به دلیل پشتیبانی از Unicode)، اگر داده‌ها به صورت ASCII کد باشد مشکلی نیست؛ اما در سیستم Unicode مشکل به وجود می‌آید. برای حل این اشکال کلاس‌هایی برای تبدیل داده‌های متنی به ارائه‌ای از byte‌ها و همین طور برعکس طراحی شده است که به شما کمک می‌کند براحتی عملیات ورودی و خروجی را انجام دهید.

برخی جریان‌داده‌هایی در #C از پیش تعریف شده ‌است که برای دسترسی به آنها باید از فضای نام System در برنامه خود استفاده کنید. در زیر آنها را به صورت فهرست‌وار بیان می‌کنیم:

Console.Out: به استاندارد خارجی در #C متصل است و زمانی مقدار می‌گیرد که متد Console.WriteLine یا
Console.Write فراخوانی می‌شود.

Console.In: به استاندارد ورودی در #C متصل است و زمانی مقدار می‌گیرد که متد Console.Read یا Console.ReadLine فراخوانی شود.

Console.Error: یک ارجاع به جریان‌داده‌ای خطاها متصل است.

تمامی این جریان داده‌ها که در بالا توضیح داده شد با توجه به دستگاه‌های ورودی و خروجی شما متفاوت است و مطابق با آن، دستگاه عمل می‌کند.

بررسی کلاس‌های اصلی جریان داده‌ای در net.

تمامی این کلاس‌ها در فضای نام System.IO موجود است. این فضای نام شامل Stream بوده که یک کلاس پایه برای تمامی کلاس‌هایی است که با جریان داده‌ها کار می‌کند.

برخی الگو‌ها و ویژگی‌های اصلی این کلاس را بررسی می‌کنیم.

الگو‌ها

Close: یک جریان داده‌ای را می‌بندد، به این معنی که انتقال اطلاعات از طریق آن جریان داده دیگر امکان‌پذیر نیست‌.

Flush: محتویات یک شیء جریان داده را روی دستگاه فیزیکی مرتبط با آن می‌نویسد.

ReadByte: یک عدد صحیح برمی‌گرداند که مشخص می‌کند می‌تواند از آن منبع جریان داده بخواند یا خیر. اگر به انتهای فایل یا به انتهای یک جریان داده رسیده باشد، عدد ۱ـ‌ را بر می‌گرداند در غیر این صورت تعداد Byte‌هایی را که خوانده برمی‌گرداند.

(Read (byte[] buf, int offset, int numbyte: این الگو شروع به خواندن یک بلاک از داده‌ها از جریان داده‌‌های ورودی می‌کند و آن را از نقطه[​buf [offset به اندازه numbyte می‌خواند، سپس هر تعداد بایتی را که موفق به خواندن آنها شده‌است، بر می‌گرداند.

(Write (byte b: یک بایت داده را در یک جریان داده‌ای می‌نویسد.

(Write (byte[] buf, int offset, int numBytes: متغیر‌های ورودی این متد مانند Read است، فقط به جای این که آن بلاک داده را بخوانند، ‌آن را روی جریان داده‌ای می‌نویسد.

(long Seek (long offset, SeekOrigin origin: همیشه برای کار با یک جریان داده به یک نقطه آغاز نیاز دارید. اگر بعد از چند بار از یک جریان داده اطلاعات بخوانید یا روی آن بنویسید، موقعیت مکانی روی آن جریان داده تغییر می‌کند، اما بعضی وقت‌ها نیاز است که خود شما به صورت دستی این موقعیت مکانی را تغییر دهید. در این حالت با استفاده از متد Seek می‌توانید روی یک جریان داده حرکت کنید.

ویژگی‌های کلاس Stream

CanRead: مشخص می‌کند که از یک جریان داده می‌توان اطلاعاتی را دریافت کرد یا خیر.

CanWrite: مشخص می‌کند که می‌توان روی یک جریان داده اطلاعاتی را نوشت یا خیر.

CanSeek: مشخص می‌کند که می‌توان موقعیت مکانی روی یک جریان داده را تغییر داد یا خیر.

Length: اندازه یک جریان داده را مشخص می‌کند

Position: موقعیت مکانی یک جریان داده را مشخص می‌کند

تمامی ویژگی‌هایی که در بالا ذکر شد فقط به صورت خواندنی است؛ یعنی شما نمی‌توانید به آنها مقدار بدهید. وقتی یک شیء از Stream‌ ایجاد کردید این ویژگی‌ها مقدار می‌گیرند.

امیربهاءالدین سبط‌ الشیخ

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها