Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ПолноС руководство. Π‘# 4.0Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 98

Автор Π¨ΠΈΠ»Π΄Ρ‚ Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ.Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ для поиска: ΠžΡ‚Π²Π΅Ρ€Ρ‚ΠΊΠΈΠžΡ‚Π²Π΅Ρ€Ρ‚ΠΊΠΈ: 18 ΡˆΡ‚ΡƒΠΊ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ. Π¦Π΅Π½Π°: $1.50 Π·Π° ΡˆΡ‚ΡƒΠΊΡƒ.ΠžΠ±Ρ‰Π°Ρ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎ наимСнованию <ΠžΡ‚Π²Π΅Ρ€Ρ‚ΠΊΠΈ>: $27.00.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ свСдСния ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π½Ρ‹Ρ… запасах ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π° Π½Π΅ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ для чтСния тСкстовой Ρ„ΠΎΡ€ΠΌΠ΅. Благодаряэтому ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° числовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π±Π΅Π· ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΡ… прСобразования ΠΈΠ· тСкстовой Ρ„ΠΎΡ€ΠΌΡ‹.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ обнаруТиваСтся ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ EndOfStreamException ΠΏΠΎ достиТСнии ΠΊΠΎΠ½Ρ†Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈ поэтому Ρ„Π°ΠΉΠ» читаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ найдСнискомый ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΈΠ»ΠΈ сгСнСрировано Π΄Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для обнаруТСния ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π½Π΅ трСбуСтся.Π€Π°ΠΉΠ»Ρ‹ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ доступом

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… использовались ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Ρ‚.Π΅. Ρ„Π°ΠΉΠ»Ρ‹ сострого Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ доступом, Π±Π°ΠΉΡ‚ Π·Π° Π±Π°ΠΉΡ‚ΠΎΠΌ. Но доступ ΠΊ содСрТимому Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚Π±Ρ‹Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ. Для этого слуТит, Π² частности, ΠΌΠ΅Ρ‚ΠΎΠ΄ Seek(), ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉΠ² классС FileStream. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ полоТСния Π² Ρ„Π°ΠΉΠ»Π΅,ΠΈΠ»ΠΈ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ„Π°ΠΉΠ»Π°, Π½Π° любоС мСсто Π² Ρ„Π°ΠΉΠ»Π΅. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° общаяформа ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Seek():long Seek(long offset, SeekOrigin origin)

Π³Π΄Π΅ offset ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ указатСля Ρ„Π°ΠΉΠ»Π° Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»Π° отсчСта (origin). Π’ качСствС origin ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, опрСдСляСмых Π² пСрСчислСнии SeekOrigin.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅SeekOrigin.BeginПоиск ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ„Π°ΠΉΠ»Π°SeekOrigin.CurrentПоиск ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСнияSeekOrigin.EndПоиск ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ опСрация чтСния ΠΈΠ»ΠΈ записи послС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Seek() Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, начиная с Π½ΠΎΠ²ΠΎΠ³ΠΎ полоТСния Π² Ρ„Π°ΠΉΠ»Π΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Если воврСмя поиска Π² Ρ„Π°ΠΉΠ»Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, Ρ‚ΠΎ гСнСрируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ IOException.Если ΠΆΠ΅ запрос полоТСния Π² Ρ„Π°ΠΉΠ»Π΅ Π½Π΅ поддСрТиваСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Ρ‚ΠΎ гСнСрируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NotSupportedException. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сгСнСрированыи Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ дСмонстрируСтся Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π² Ρ„Π°ΠΉΠ» ΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ доступом. Π‘Π½Π°Ρ‡Π°Π»Π° Π² Ρ„Π°ΠΉΠ» Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ прописныС Π±ΡƒΠΊΠ²Ρ‹ английского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ Π΅Π³ΠΎ содСрТимоС считываСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС.// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ.using System;using System.IO;class RandomAccessDemo { static void Main() { FileStream f = null; char ch; try { f = new FileStream("random.dat", FileMode.Create); // Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ английский Π°Π»Ρ„Π°Π²ΠΈΡ‚ Π² Ρ„Π°ΠΉΠ». for (int i=0; i < 26; i++) f.WriteByte((byte)('A'+i)); // А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹ английского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. f.Seek(0, SeekOrigin.Begin); // Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ ch = (char) f.ReadByte(); Console.WriteLine("ΠŸΠ΅Ρ€Π²Π°Ρ Π±ΡƒΠΊΠ²Π°: " + ch); f.Seek(1, SeekOrigin.Begin); // Π½Π°ΠΉΡ‚ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°ΠΉΡ‚ ch = (char) f.ReadByte(); Console.WriteLine("Вторая Π±ΡƒΠΊΠ²Π°: " + ch); f.Seek(4, SeekOrigin.Begin); // Π½Π°ΠΉΡ‚ΠΈ пятый Π±Π°ΠΉΡ‚ ch = (char) f.ReadByte(); Console.WriteLine("ΠŸΡΡ‚Π°Ρ Π±ΡƒΠΊΠ²Π°: " + ch); Console.WriteLine (); // А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹ английского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ. Console.WriteLine("Π‘ΡƒΠΊΠ²Ρ‹ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ: "); for(int i=0; i < 26; i += 2) { f.Seek(i, SeekOrigin.Begin); // Π½Π°ΠΉΡ‚ΠΈ i-ΠΉ символ ch = (char) f.ReadByte(); Console.Write(ch + " "); } } catch(IOException exc) { Console.WriteLine("Ошибка Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°\n" + exc.Message); } finally { if(f != null) f.Close(); } Console.WriteLine(); }}

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ получаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠŸΠ΅Ρ€Π²Π°Ρ Π±ΡƒΠΊΠ²Π°: АВторая Π±ΡƒΠΊΠ²Π°: Π’ΠŸΡΡ‚Π°Ρ Π±ΡƒΠΊΠ²Π°: Π•Π‘ΡƒΠΊΠ²Ρ‹ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ:А C E G I K M O Q S U W Y

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Seek() ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΌΠ°Π»ΠΎ прСимущСств ΠΏΡ€ΠΈ использованиис Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, сущСствуСт ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ установки Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ полоТСния Π² Ρ„Π°ΠΉΠ»Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойства Position. Как слСдуСт ΠΈΠ· Ρ‚Π°Π±Π». 14.2, свойство Position доступнокак для чтСния, Ρ‚Π°ΠΊ ΠΈ для записи. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΆΠ΅ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π΅. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ записи ΠΈ чтСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π° с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ доступом random.dat, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ с Ρ†Π΅Π»ΡŒΡŽ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ свойстваPosition.Console.WriteLine("Π‘ΡƒΠΊΠ²Ρ‹ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ: ");for(int i=0; i < 26; i += 2) { f.Position = i; // Π½Π°ΠΉΡ‚ΠΈ i-ΠΉ символ посрСдством свойства Position ch = (char) f.ReadByte(); Console.Write(ch + " ");}ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ класса MemoryStream

Иногда оказываСтся ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· массива ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΠ²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² массив, Π° Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… нСпосрСдствСнно ΠΈΠ· устройства ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ прямо Π½Π° Π½Π΅Π³ΠΎ. Для этой Ρ†Π΅Π»ΠΈ слуТит класс MemoryStream. Он прСдставляСтсобой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ класса Stream, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ массив Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Π²ΠΎΠ΄Π°ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ классС MemoryStream ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ нСсколько конструкторов. НиТС прСдставлСн ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…:MemoryStream(byte[] buffer)

Π³Π΄Π΅ buffer ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ массив Π±Π°ΠΉΡ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² качСствС источника ΠΈΠ»ΠΈ адрСсата Π² запросах Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ этот конструктор, слСдуСт ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ,Ρ‡Ρ‚ΠΎ массив buffer Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ достаточно большим для хранСния направляСмыхв Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ примСнСниСкласса MemoryStream Π² опСрациях Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°.// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ класса MemoryStream.using System;using System.IO;class MemStrDemo { static void Main() { byte[] storage = new byte[255]; // Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. MemoryStream memstrm = new MemoryStream(storage); // Π—Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ memstrm Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ классов // чтСния ΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠΎΡ‚ΠΎΠΊΠΈ. StreamWriter memwtr = new StreamWriter(memstrm); StreamReader memrdr = new StreamReader(memstrm); try { // Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ memwtr. for(int i=0; i < 10; i++) memwtr.WriteLine("byte [" + i + "]: " + i); // ΠŸΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ. memwtr.WriteLine("."); memwtr.Flush(); Console.WriteLine("Π§Ρ‚Π΅Π½ΠΈΠ΅ прямо ΠΈΠ· массива storage: "); // ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ содСрТимоС массива storage нСпосрСдствСнно, foreach(char ch in storage) { if (ch == '.') break; Console.Write(ch); } Console.WriteLine("\nΠ§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° memrdr: "); // Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° memstrm срСдствами Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°. memstrm.Seek(0, SeekOrigin.Begin); // ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ„Π°ΠΉΠ»Π° // Π² исходноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ string str = memrdr.ReadLine(); while(str != null) { str = memrdr .ReadLine(); if (str[0] == '.') break; Console.WriteLine(str); } } catch(IOException exc) { Console.WriteLine("Ошибка Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°\n" + exc.Message); } finally { // ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурсы ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². memwtr.Close(); memrdr.Close(); } }}

Π’ΠΎΡ‚ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Π§Ρ‚Π΅Π½ΠΈΠ΅ прямо ΠΈΠ· массива storage:byte [0]: 0byte [1]: 1byte [2]: 2byte [3]: 3byte [4]: 4byte [5]: 5byte [6]: 6byte [7]: 7byte [8]: 8byte [9]: 9Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° memrdr:byte [1]: 1byte [2]: 2byte [3]: 3byte [4]: 4byte [5]: 5byte [6]: 6byte [7]: 7byte [8]: 8byte [9]: 9

Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ сначала создаСтся массив Π±Π°ΠΉΡ‚ΠΎΠ², Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ storage. ЗатСмэтот массив ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС основной памяти для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° memstrm классаMemoryStream. Из ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° memstrm, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ memrdr класса StreamReader ΠΈ memwtr класса StreamWriter. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° memwtr Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, чтопослС записи Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° memwtr вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Flush(). Π­Ρ‚ΠΎΠ½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ содСрТимоС Π±ΡƒΡ„Π΅Ρ€Π° этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π»ΠΎΡΡŒ нСпосрСдствСнно Π² Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ массив. Π”Π°Π»Π΅Π΅ содСрТимоС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ массива Π±Π°ΠΉΡ‚ΠΎΠ² отобраТаСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π² Ρ†ΠΈΠΊΠ»Π΅ foreach. ПослС этого ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ„Π°ΠΉΠ»Π° устанавливаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Seek() Π² Π½Π°Ρ‡Π°Π»ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Ρ‚Π΅ΠΌ вводятсяданныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° memrdr.

Π—Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для программирования. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ слоТный Π²Ρ‹Π²ΠΎΠ΄ с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌΠ΄Π°Π½Π½Ρ‹Ρ… Π² массивС Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ понадобятся. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ для программирования Π² Ρ‚Π°ΠΊΠΎΠΉ срСдС с графичСским ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом, ΠΊΠ°ΠΊ Windows. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, стандартный ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пСрСадрСсованиз массива. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠΎΠ΄Π°Ρ‡ΠΈ тСстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ классов StringReader ΠΈ StringWriter