Stream در سیشارپ
Stream در سیشارپ ساختاری برای انتقال و پردازش دادهها است که در فایلها، حافظه و ارتباطات شبکه کاربرد دارد.
Stream در سیشارپ
در برنامهنویسی، مدیریت دادهها یکی از مهمترین بخشهای توسعه نرمافزار است.
زمانی که قصد خواندن یا نوشتن اطلاعات از فایلها، حافظه، شبکه یا سایر منابع داده را داریم، استفاده از Stream در سیشارپ اهمیت ویژهای پیدا میکند.
Stream یا «جریان داده» مکانیزمی است که امکان انتقال پیوسته دادهها بین منبع و مقصد را فراهم میکند.
به بیان ساده، Stream یک مسیر ارتباطی برای خواندن و نوشتن اطلاعات محسوب میشود.
در فریمورک داتنت، کلاسهای مختلفی برای کار با Stream ارائه شدهاند که به توسعهدهندگان اجازه میدهند بدون درگیر شدن با جزئیات سطح پایین سیستمعامل، عملیات ورودی و خروجی (I/O) را به شکلی استاندارد انجام دهند.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
Stream چیست؟
Stream یک کلاس انتزاعی (Abstract Class) در فضای نام System.IO است که مبنای تمام عملیات خواندن و نوشتن دادهها در داتنت محسوب میشود.
این کلاس امکاناتی برای خواندن، نوشتن، جابهجایی مکان فعلی (Seek) و مدیریت دادهها فراهم میکند.
در واقع Stream دادهها را به صورت دنبالهای از بایتها مدیریت میکند.
فرقی ندارد دادهها از یک فایل، حافظه RAM، شبکه یا دستگاه دیگری دریافت شوند؛ در نهایت همه آنها به شکل یک Stream قابل پردازش هستند.
مزایای استفاده از Stream در سی شارپ
استفاده از Stream مزایای متعددی دارد:
-
کاهش مصرف حافظه
در فایلهای بزرگ نیازی نیست کل فایل در حافظه بارگذاری شود. Stream دادهها را به صورت بخشبخش پردازش میکند. -
افزایش کارایی
عملیات خواندن و نوشتن به صورت تدریجی انجام میشود و عملکرد برنامه بهبود پیدا میکند. -
انعطافپذیری بالا
امکان کار با انواع منابع داده مانند فایل، حافظه، شبکه و فشردهسازی وجود دارد. -
قابلیت توسعه
توسعهدهندگان میتوانند Streamهای سفارشی ایجاد کنند.
فضای نام مورد نیاز
برای استفاده از Stream باید فضای نام زیر را اضافه کنید:
using System.IO;
ویژگیهای مهم Stream
کلاس Stream دارای چند ویژگی مهم است:
-
CanRead
مشخص میکند آیا امکان خواندن داده وجود دارد یا خیر.
stream.CanRead
-
CanWrite
مشخص میکند آیا میتوان داده نوشت.
stream.CanWrite
-
CanSeek
مشخص میکند آیا امکان جابهجایی در موقعیت داده وجود دارد.
stream.CanSeek
-
Length
طول کل داده را بر حسب بایت برمیگرداند.
stream.Length
-
Position
موقعیت فعلی خواندن یا نوشتن را نشان میدهد.
stream.Position
متدهای مهم Stream در سی شارپ
-
Read
برای خواندن داده استفاده میشود.
stream.Read(buffer, 0, buffer.Length);
-
Write
برای نوشتن داده استفاده میشود.
stream.Write(buffer, 0, buffer.Length);
-
Seek
برای تغییر مکان فعلی در Stream کاربرد دارد.
stream.Seek(0, SeekOrigin.Begin);
-
Flush
اطلاعات موجود در بافر را ذخیره میکند.
stream.Flush();
-
Close
Stream را میبندد.
stream.Close();
انواع Stream در سیشارپ
داتنت چندین نوع Stream مختلف ارائه میدهد.
-
FileStream
یکی از پرکاربردترین انواع Stream است که برای کار با فایلها استفاده میشود.
نمونه ایجاد FileStream:
FileStream fs = new FileStream(
"data.txt",
FileMode.OpenOrCreate,
FileAccess.ReadWrite
);
نوشتن اطلاعات در فایل
using System.Text;
using System.IO;
string text = "Hello World";
byte[] data = Encoding.UTF8.GetBytes(text);
using(FileStream fs = new FileStream(
"test.txt",
FileMode.Create))
{
fs.Write(data, 0, data.Length);
}
در این مثال رشته متنی به بایت تبدیل شده و داخل فایل ذخیره میشود.
خواندن اطلاعات از فایل
using System.Text;
using System.IO;
using(FileStream fs = new FileStream(
"test.txt",
FileMode.Open))
{
byte[] data = new byte[fs.Length];
fs.Read(data, 0, data.Length);
string text = Encoding.UTF8.GetString(data);
Console.WriteLine(text);
}
-
MemoryStream
using MemoryStream ms = new MemoryStream();
byte[] data = {1,2,3,4,5};
ms.Write(data,0,data.Length);
مزایای MemoryStream
-
سرعت بسیار بالا
-
عدم نیاز به فایل فیزیکی
-
مناسب برای پردازش تصاویر
-
مناسب برای تبدیل دادهها
مثال MemoryStream
using System.IO;
using System.Text;
MemoryStream ms = new MemoryStream();
string text = "Stream Example";
byte[] bytes =
Encoding.UTF8.GetBytes(text);
ms.Write(bytes,0,bytes.Length);
ms.Position = 0;
byte[] result =
ms.ToArray();
Console.WriteLine(
Encoding.UTF8.GetString(result)
);
-
BufferedStream
FileStream fs =
new FileStream("data.txt",
FileMode.Open);
BufferedStream bs =
new BufferedStream(fs);
-
NetworkStream
TcpClient client =
new TcpClient("localhost",5000);
NetworkStream ns =
client.GetStream();
-
CryptoStream
برای رمزنگاری و رمزگشایی دادهها استفاده میشود.
CryptoStream cryptoStream =
new CryptoStream(
stream,
encryptor,
CryptoStreamMode.Write);
-
GZipStream
برای فشردهسازی دادهها کاربرد دارد.
GZipStream gzip =
new GZipStream(
fileStream,
CompressionMode.Compress);
StreamReader و StreamWriter
کار کردن مستقیم با بایتها همیشه راحت نیست.
برای خواندن و نوشتن متن میتوان از StreamReader و StreamWriter استفاده کرد.
-
استفاده از StreamWriter
using(StreamWriter writer =
new StreamWriter("test.txt"))
{
writer.WriteLine("Hello");
}
-
استفاده از StreamReader
using(StreamReader reader =
new StreamReader("test.txt"))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
تفاوت Stream و StreamReader
| Stream | StreamReader |
| با بایت کار میکند | با متن کار میکند |
| سطح پایینتر است | سطح بالاتر است |
| انعطافپذیرتر است | استفاده آسانتر دارد |
| برای همه دادهها مناسب است | برای دادههای متنی مناسب است |
مدیریت منابع با using
یکی از بهترین روشها برای کار با Stream استفاده از بلوک using است.
using(FileStream fs =
new FileStream("file.txt",
FileMode.Open))
{
}
مزیت این روش این است که پس از پایان کار، منابع سیستم به صورت خودکار آزاد میشوند.
عملیات Asynchronous روی Stream
در برنامههای مدرن استفاده از متدهای Async اهمیت زیادی دارد.
-
نوشتن غیرهمزمان
await fs.WriteAsync(
buffer,
0,
buffer.Length
);
-
خواندن غیرهمزمان
await fs.ReadAsync(
buffer,
0,
buffer.Length
);
چرا Async مهم است؟
-
جلوگیری از قفل شدن رابط کاربری
-
افزایش سرعت برنامه
-
بهبود عملکرد سرور
-
استفاده بهتر از منابع سیستم
مدیریت Position در Stream
هر Stream دارای یک اشارهگر داخلی است که مکان فعلی را نگهداری میکند.
stream.Position = 0;
برای بازگشت به ابتدای فایل:
stream.Seek(
0,
SeekOrigin.Begin
);
نکات مهم هنگام استفاده از Stream
- همیشه Stream را ببندید
stream.Close();
- یا از using استفاده کنید.
- از Async استفاده کنید
- در فایلهای بزرگ عملکرد بسیار بهتری خواهید داشت.
- اندازه بافر مناسب انتخاب کنید
- بافرهای خیلی کوچک یا خیلی بزرگ میتوانند عملکرد را کاهش دهند.
- خطاها را مدیریت کنید
try
{
}
catch(IOException ex)
{
Console.WriteLine(ex.Message);
}
کاربردهای Stream در پروژههای واقعی
در پروژههای عملی تقریباً همه جا با Stream مواجه میشویم:
-
آپلود فایل در وبسایت
-
دانلود فایل از اینترنت
-
ذخیره تصاویر
-
پردازش PDF
-
ارتباطات شبکه
-
وبسرویسها
-
فشردهسازی فایلها
-
رمزنگاری اطلاعات
-
تولید فایلهای Excel
-
تولید فایلهای Word و PDF
جمعبندی
Stream یکی از مهمترین مفاهیم در سیشارپ و داتنت است که پایه و اساس تمام عملیات ورودی و خروجی را تشکیل میدهد.
کلاس Stream امکان خواندن و نوشتن دادهها را از منابع مختلف فراهم میکند و انواع مختلفی مانند FileStream، MemoryStream، NetworkStream، BufferedStream، CryptoStream و GZipStream برای سناریوهای گوناگون در اختیار برنامهنویسان قرار میدهد.
درک صحیح Stream باعث میشود بتوانید فایلهای بزرگ را با کارایی بالا مدیریت کنید، دادهها را از طریق شبکه منتقل نمایید، عملیات رمزنگاری و فشردهسازی انجام دهید و برنامههایی سریعتر و بهینهتر توسعه دهید.
به همین دلیل یادگیری Stream یکی از مهارتهای ضروری برای هر برنامهنویس سیشارپ محسوب میشود.




کاربران ما
شما هم نظرتون با ما دریاره “Stream در سیشارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید