ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°: ΠΡΠ²Π΅ΡΡΠΊΠΈΠΡΠ²Π΅ΡΡΠΊΠΈ: 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