TOC

This article is currently in the process of being translated into Arabic (~99% done).

Data Streams:

MemoryStream

تعد MemoryStream واحدة من فئات البث الأساسية التي سترى أنها مستخدمة قليلاً. يتعامل مع البيانات الموجودة في الذاكرة مباشرة ، كما يوحي الاسم وغالبًا ما يستخدم للتعامل مع البايتات القادمة من مكان آخر ، على سبيل المثال. ملف أو موقع على الشبكة ، بدون تأمين المصدر.

على سبيل المثال ، يمكنك قراءة محتويات الملف بالكامل في MemoryStream ، والتي تقوم بتأمين الملف وإلغاء قفله مرة أخرى على الفور ، ثم تبدأ العمل على وحدات البايت في MemoryStream. إذا كنت بحاجة إلى بذل الكثير من البحث ذهابًا وإيابًا بالبايت ، فهذا أيضًا أسرع بكثير من القيام بالشيء نفسه مباشرةً في FileStream على سبيل المثال، لأنه يتم تخزين وحدات البايت الموجودة في MemoryStream في الذاكرة بدلاً من تخزينها على القرص.

لذلك ، غالبًا ما ستشاهد MemoryStream يتم تهيئته بمصفوفة 'array' من byte[]) bytes) قادمة من مصدر آخر ، وغالبًا ، سترى MemoryStream الذي تم إنشاؤه يتم تمريره إلى آلية أخرى ستستخدم MemoryStream ، أحد أنواعها StreamReader. هذا مثال:

public void UseMemoryStream()
{
	byte[] fileContents = File.ReadAllBytes("test.txt");
	using(MemoryStream memoryStream = new MemoryStream(fileContents))
	{
		using(TextReader textReader = new StreamReader(memoryStream))
		{
			string line;
			while((line = textReader.ReadLine()) != null)
				Console.WriteLine(line);
		}
	}
}

في هذا المثال ، نقرأ كل bytes في ملف نصي بسيط. نقوم بعد ذلك بإنشاء MemoryStream بهذه البايتات bytes ثم نقوم بإنشاء مثيل StreamReader الذي سيقرأ جميع الأسطر من MemoryStream. كما يوضح هذا المثال ، فإن MemoryStream هو مصدر دعم رائع لفئة أخرى ستقوم بالعمل ، في هذه الحالة StreamReader.

يعد استخدام فئات StreamReader / StreamWriter اختصارًا رائعًا للعمل مع Stream الأساسي ، ولكن إذا أصررت ، يمكنك قراءة البايتات 'bytes' مباشرة من MemoryStream والعمل معها. تأتي فئة MemoryStream بعدة طرق لذلك ، على سبيل المثال طريقة ()ReadByte . سيقرأ البايت 'byte' في الموضعه الحالي ، ويعيده ثم يتقدم في الموضع ، ويجهز MemoryStream لقراءة البايت 'byte' التالي. هذا مثال:

public void UseMemoryStream()
{
	byte[] fileContents = File.ReadAllBytes("test.txt");
	using(MemoryStream memoryStream = new MemoryStream(fileContents))
	{
		int b;
		while((b = memoryStream.ReadByte()) >= 0)
			Console.WriteLine(Convert.ToChar(b));
	}
}

سيقرأ كل بايت 'byte' الموجود في MemoryStream ويخرجه إلى Console. لاحظ أنني أستخدم طريقة ()Convert.ToChar لتحويل byte إلى حرف من نوع ASCII ، لأنني أعرف أن المصدر نص عادي.

Summary

يمكن استخدام فئة class MemoryStream كمصدر دعم للبيانات التي تريد الاحتفاظ بها في الذاكرة. هذا يجعله تخزينًا مؤقتًا رائعًا للبيانات الواردة من ملف أو مصدر شبكة ، لمنع عمليات الإقفال وما إلى ذلك أثناء العمل مع البيانات.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!